执行类型转换之后进行比较,参照算法 MDN
执行顺序
- 等式的左右值进行类型转换,获得相同类型
- 值比较
以下等式均成立
console.log(undefined == null)
console.log(1 == '1')
console.log(1 == true)
console.log('1' == 1)
console.log('1' == true)
console.log([] == 0)
console.log([] == '')
console.log([1] == 1)
console.log([1] == '1')
console.log({} == '[object Object]')
不进行隐式转换的比较,参照算法 MDN
执行顺序
- 值的类型比较
- 值比较
- 例外:针对 number 类型的值比较,都是 NaN 时不相等,不区分 +0 和 -0
以下等式均成立
console.log(undefined !== null)
console.log(true !== 1)
console.log('1' !== 1)
console.log([] !== '')
console.log([1] !== 1)
console.log(NaN !== NaN)
console.log(+0 === -0)
Object.is
与严格比较的差异:
- 区分 +0 和 -0
- NaN 与 NaN 视为相等
同值相等的差异
- 不区分 +0 和 -0
===
、SameValueZero
、SameValue
的差异其实比较小,这里 isEqual
使用 SameValueZero
作为默认比较算法