相等运算符(==
): 先转换再比较
全等运算符(===
): 仅比较而不转换
1.when 布尔值 == “other”, 布尔值 => 数值. false
=> 0, true
=> 1.
2.when 字符串 == 数值,字符串 => 数值.
3.when 对象 == “other”,对象 => 对象.valueOf()
or 对象.toString()
(转换成基本数据类型).
1.null == undefined // true
2.要比较相等性之前,null
,undefined
不转换成其它值
3.比较两操作数中只要有NaN
(not a number),就返回false
4.比较两操作数都是对象的时候,比较引用的对象是否相等
1.[] == ![] // true
![]
,遇到!
转换成boolean.[]
是数组对象,转换成boolean值是true
,再取反得到false
.运用转换规则1,相等运算符右侧最终得到0
.对左边操作数执行转换规则3,得到空字符串(""
),再运用转换规则2,得到数值0
.所以最终的比较为0 == 0
,所以结果为true
.
1.NaN == NaN // false
NaN === NaN // false
2.判断操作数是否是NaN
使用isNaN()
或者Number.isNaN()
3.undefined === null // false