我们都知道JavaScript是一种非常有趣的语言,有一些棘手的部分。 如果可能的话,请解释它是如何工作的:[ ]
等于![ ]
.
[ ] == ![ ] // -> true
我不明白,为什么结果是"true"
?
因为==
不比较它们类型安全,但值被强制转换:
[] == ![]
//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
当你调用if(数组== false(时,你比较这个对象的值和原始的假值。在内部,arr.toString(( 被调用,它返回一个空字符串 "。
![] // will return false
[] == false // this would return true, since "" == false
console.log((![]).toString());
console.log(([]).toString());
console.log("" == false);
这是内部的称呼方式,请查看此答案 了解更多详情