比较运算符
比较运算符也具有返回值,返回布尔值
var a = 5 > 4
a // true
字符串的比较
同是字符串类型的比较,比较的是 unicode
。
- 先比较首字母的,如果有结果,则返回。
- 如果没有结果,比较第二位的字符编码,重复以上步骤。
- 如果两个字符串已经比较完了,则判断相等,如果有一方已经结束,则另一方大。
var a = 'ab' > 'a' // true
不同类型之间的比较
不同类型之间的比较,会首先将其转为数字在比较。
一些特殊情况:
var a = 0
var b = '0'
Boolean(a) // false
Boolean(b) // true
a == b // true
严格相等
上面之所以会先转为数字,是因为不是严格相等的比较。严格相等,则不会隐式转换。
var a = 1 === '1' // false
null和undefined
一直以为空值(如null, undefined, ‘’)比较时,如果转为数字,会隐式转为0,但实际上并不完全是的。
null == undefined // true
null === undefined // false
使用数学或其他比较方法时,会隐式转换, null => 0
, undefined => NaN
特别注意的比较
null
null > 0 // false
null == 0 // false
null >= 0 // true
第一个 null隐式转为0, 0 > 0 false
第二个并没有隐式转换,因为相等性检测 ==
和普通比较符 > < >= <=
的代码逻辑是独立的。null和undefined的相等性检测,不会进行任何的类型隐式转换,除了它们两个之间的相等性检测是true,不会等于任何其他值。
第三个 根据第二个说描述,>= 属于普通比较符,会进行隐式转换为 0。
undefined
undefined隐式转换为数字类型时是 NaN
,所以会看到如下。
undefined > 0 // false
undefined < 0 // false
undefined == 0 // false 不进行隐式转换,走null和undefined自己的相等性检测