1. "=="相等,两边数据类型不同,需要先转为相同类型,然后再比较
@1. 对象==字符串 需要对象转为字符串[Symbol.toPrimitive] --> valueOf() --> toString()
关于Symbol.toPrimitive:https://www.jianshu.com/p/0afef687ca7e
@2. null == undefiend --> true 但是null/undefined和任何值都不相等
@3. 对象==对象 比较的时对内存地址,地址相同则相等
{} == {} --> false
因为这是开辟两个不同的堆内存地址,所以不相等
@4 NaN == NaN -->false
NaN和任何数不相等,包括它自己
@5. 除了以上情况,只要两边类型不一致,剩下的都是转为数字,然后再进行比较
第一个,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