为什么数组等于数组而不是数组(javascript)?



我们都知道JavaScript是一种非常有趣的语言,有一些棘手的部分。 如果可能的话,请解释它是如何工作的:[ ]等于![ ].

[ ] == ![ ]    // -> true

我不明白,为什么结果是"true"

因为==不比较它们类型安全,但值被强制转换:

[] == ![]
//is
[] == false
//is casted into
"" == false
//and that into
false == false
//wich is
true

使用类型安全比较

console.log(`[] == ![]`, [] == ![])
console.log(`[] === ![]`, [] === ![])

在我看来,使用==的唯一原因是当你反对nullundefined并希望同时涵盖两者时。所以,写作

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);

这是内部的称呼方式,请查看此答案 了解更多详情

相关内容

  • 没有找到相关文章

最新更新