在双等运算符中,分为二种情况。
一种情况为双边数据类型一致
普通数据类型
1 == 1 // true
'1' == '2' // false
null == null // true
undefined == undefined // true
复杂数据类型,判断二端对象指向的地址是否一致
[] == [] // false
{} == {} // false
const fn = () => {}
fn() == fn() // true
特殊情况
NaN 和任何类型比较都是 false
NaN == NaN // false
另一种情况为双边数据类型不一致
一种特殊,null == undefined 是true,和其他类型对比是false
null == undefined // ==== > true
null == 0 // false
null == '111' // false
二种规则
布尔类型 ==> 布尔转数字进行比较
true == 1
+true ==> 1
1 == 1
=== > 最终为true
false == 0 同理
有一端出现了对象 ==》 对象转原始类型
[] == 2 //false
[].valueOf() // ==> []
现在还不是原始类型
[].toString() // == > ''
转为了空字符串,空字符转转数字
+'' == 0
0 == 2 //false