我们都知道JavaScript是一个非常有趣的语言,有棘手的部分。
如果可能,请解释它的工作原理:[ ]
等于![ ]
。
[ ] == ![ ] // -> true
我不明白,为什么结果是"true"
?
答案 0 :(得分:2)
因为==
并不比较它们的类型安全,但是这些值会被投放:
[] == ![]
//is
[] == false
//is casted into
"" == false
//and that into
false == false
//wich is
true
使用类型安全比较
console.log(`[] == ![]`, [] == ![])
console.log(`[] === ![]`, [] === ![])

在我看来,使用==
的唯一原因是当你追查null
或undefined
并希望同时涵盖两者时。所以,写作
value == null
//or
value != null
//instead of the more explicit (but longer)
value === null || value === undefined
//respectively
value !== null && value !== undefined
我使用===
的其他地方因为==
有时会产生这些有趣的结果。
这是关于该主题的一个有趣的小片段,享受:https://www.destroyallsoftware.com/talks/wat
答案 1 :(得分:0)
当你调用if(array == false)时,你要比较这个对象的值和原始的假值。在内部,调用arr.toString(),它返回一个空字符串“”。
![] // will return false
[] == false // this would return true, since "" == false
console.log((![]).toString());
console.log(([]).toString());
console.log("" == false);
这是内部调用方式,请查看this answer 了解更多详情