大于 / 小于:a > b
,a < b
。
大于等于 / 小于等于:a >= b
,a <= b
。
检查两个值的相等:a == b
,请注意双等号 ==
表示相等性检查,而单等号 a = b
表示赋值。
检查两个值不相等:不相等在数学中的符号是 ≠
,但在 JavaScript 中写成 a != b
。
1字符串比较
字符串是按字符(母)逐个进行比较的。
alert( 'Z' > 'A' ); // true
alert( 'Glow' > 'Glee' ); // true
alert( 'Bee' > 'Be' ); // true
2 不同类型比较
当对不同类型的值进行比较时,JavaScript 会首先将其转化为数字(number)再判定大小。
1 alert( '2' > 1 ); // true,字符串 '2' 会被转化为数字
2 alert( '01' == 1 ); // true,字符串 '01' 会被转化为数字 1
alert( true == 1 ); // true
alert( false == 0 ); // true
普通的相等性检查 ==
存在一个问题,它不能区分出 0
和 false
:
alert( 0 == false ); // true
无法区分空字符串和 false
:
alert( '' == false ); // true
这是因为在比较不同类型的值时,处于相等判断符号 ==
两侧的值会先被转化为数字。空字符串和 false
也是如此,转化后它们都为数字 0。
严格相等运算符 ===(三等) 在进行比较时不会做任何的类型转换。
alert( null === undefined ); // false
alert( null == undefined ); // true
当使用数学式或其他比较方法 < > <= >=
时:
null/undefined
会被转化为数字:null
被转化为 0
,undefined
被转化为 NaN
。
下面让我们看看,这些规则会带来什么有趣的现象。同时更重要的是,我们需要从中学会如何远离这些特性带来的“陷阱”。
undefined
不应该被与其他值进行比较:
alert( undefined > 0 ); // false
alert( undefined < 0 ); // false
alert( undefined == 0 ); // false (3)
(1)
和 (2)
都返回 false
是因为 undefined
在比较中被转换为了 NaN
,而 NaN
是一个特殊的数值型值,它与任何值进行比较都会返回 false
。
(3)
返回 false
是因为这是一个相等性检查,而 undefined
只与 null
相等,不会与其他值相等。
除了严格相等 ===
外,其他但凡是有 undefined/null
参与的比较,我们都需要格外小心。
除非你非常清楚自己在做什么,否则永远不要使用 >= > < <=
去比较一个可能为 null/undefined
的变量。对于取值可能是 null/undefined
的变量,请按需要分别检查它的取值情况。
比较运算符始终返回布尔值。
字符串的比较,会按照“词典”顺序逐字符地比较大小。
当对不同类型的值进行比较时,它们会先被转化为数字(不包括严格相等检查)再进行比较。
在非严格相等 ==
下,null
和 undefined
相等且各自不等于任何其他的值。
在使用 >
或 <
进行比较时,需要注意变量可能为 null/undefined
的情况。比较好的方法是单独检查变量是否等于 null/undefined
。