问题描述
为什么 [] == "" && [] == 0 && "" == 0 && [] != []
?
console.log('[] == ![]', [] == ![])
console.log('[] != []', [] != [])
console.log('[] == []', [] == [])
console.log('[] == ""', [] == "")
console.log('[] == 0', [] == 0)
console.log('"" == 0', "" == 0)
类似的代码还有很多
console.log(1 + 1 + '1')
console.log('1' + 1 + 1 )
console.log(0 + [])
console.log(0 - [])
console.log({} + []);
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
如果是工作中,大概率不需要为此劳心费神,一般我们只需要使用
===
强等于做类型匹配,加上 TypeScript 大概率不会出现这种怪异的代码。如果是面试的话,那么我们需要掌握几个点
当做计算的时候,可以记住一个顺序。会把引用类型变成基本类型。
Symbol(Symbol.toPrimitive)
valueOf
toString
MDN - JavaScript 数据类型和数据结构