Page 57 - 你不知道的JavaScript(下卷)
P. 57
var a = [1,2,3];
var b = [1,2,3];
var c = "1,2,3";
a == c; // true
b == c; // true
a == b; // false
有关 == 相等比较规则的更多信息,参见 ES5 规范(11.9.3 节)以及本系列
《你不知道的 JavaScript(中卷)》第一部分的第 4 章;有关值与引用的更多
信息,参见《你不知道的 JavaScript(中卷)》第一部分的第 2 章。
4. 不等关系
运算符 <,>、<= 和 >= 用于表示不等关系,在规范中被称为“关系比较”。通常来说,它们
用于比较有序值,比如数字。3 < 4 这样的比较是很容易理解的。
也可以比较 JavaScript 中的字符串值的不等关系,这是按照常见的字母表规则来比较的
("bar" < "foo")。
类型转换呢?与 == 比较规则类似(尽管是不完全相同!)的规则可以应用于不等关系运
算符。注意,并没有与“严格相等”=== 类似的、不允许类型转换的“严格不等关系”运
算符。
考虑:
var a = 41;
var b = "42";
var c = "43";
a < b; // true
b < c; // true
上述代码发生了什么? ES5 规范中的 11.8.5 节中提到,如果 < 比较的两个值都是字符串,
就像在 b < c 中那样,那么比较按照字典顺序(即字典中的字母表顺序)进行。如果其中
一边或两边都不是字符串,就像在 a < b 中那样,那么这两个值的类型都转换为数字,然
后进行普通的数字比较。
针对类型可能不同的值之间的比较,请记住,没有“严格不等”形式可用。你最需要了解
的一点是,当其中一个值无法转换为有效数字时的情形,如下所示:
var a = 42;
var b = "foo";
a < b; // false
a > b; // false
a == b; // false
34 | 第 2 章
图灵社区会员 avilang(1985945885@qq.com) 专享 尊重版权