"=="比较时的互换规则

2021-07-24  本文已影响0人  小生菜呢

1. "=="相等,两边数据类型不同,需要先转为相同类型,然后再比较

@1. 对象==字符串 需要对象转为字符串[Symbol.toPrimitive] --> valueOf() --> toString()
关于Symbol.toPrimitive:https://www.jianshu.com/p/0afef687ca7e

@2. null == undefiend --> true 但是null/undefined和任何值都不相等


image.png
image.png

@3. 对象==对象 比较的时对内存地址,地址相同则相等

{} == {} --> false


image.png

因为这是开辟两个不同的堆内存地址,所以不相等

@4 NaN == NaN -->false


image.png

NaN和任何数不相等,包括它自己

@5. 除了以上情况,只要两边类型不一致,剩下的都是转为数字,然后再进行比较


image.png

第一个,true转为数字时1,字符串'1'转为数字也是1,所以是true
第二个,true转为数字时1,字符串'2'转为数字也是2,所以是false
练习题:

console.log([] == false)
// 都要转为数字再比较
// Number([]) --> Symbol.toPrimitive  --> valueOf  -- toString([]) -- > '' --> Number('')  --> 0
// false变成数字也是0
// 所以结果是true
console.log(![] == false)
// ![]  !Boolean([]) --> !true --> false
// false == false -->true
上一篇 下一篇

猜你喜欢

热点阅读