`===` 严格相等,会比较两个值的类型和值
`==` 抽象相等,比较时,会先进行类型转换,然后再比较值
下面来说说类型转换,是 `==` 左边的类型转换为右边的类型还是右边的类型转换为左边的数据类型?
如果在 `==` 左右俩边数据类型相等的情况下,就相当于 `===` 的比较
比较的双方数据类型不同时,进行隐式类型转换时优先转换成Number型。
console.log([0] == 0); => console.log(Number([0]) == 0); 先将 [0] 转换为 Number([0])
console.log('10' == 10); => console.log(Number('0') == 0); 先将`0` 转换为 Number('0')
但是有种情况就是 数据类型为null或者undefined的情况下是不进行隐式转换的
console.log(null == false); // false
console.log(!null == true); // true
console.log(null == undefined); // true
所以对于 `==` 我们需要记住
-
null==undefined, null/undefined不进行隐式类型转换。
-
进行隐式类型或转换时,优先转换成Number型。
`===` 首先要求比较双方类型相同, 还要求比较双方值相等。 如果比较的双方是都是对象类型,只有指向同一个对象,才能严格相等