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

Why Array is equal not array (javascript)?

提问人:Yurii Savchuk 提问时间:8/16/2017 最后编辑:Yurii Savchuk 更新时间:8/16/2017 访问量:420

问:

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

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

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

JavaScript 数组 比较 布尔逻辑

评论

0赞 omurbek 8/16/2017
因为 JavaScript 中的数组是一个对象。查看 Mozilla CDN 阵列

答:

0赞 marvel308 8/16/2017 #1

调用 if (array == false) 时,将此对象的值与原始 false 值进行比较。在内部,调用 arr.toString(),它返回一个空字符串 “”。

![] // will return false

[] == false // this would return true, since "" == false

console.log((![]).toString());
console.log(([]).toString());
console.log("" == false);

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

评论

0赞 Yurii Savchuk 8/16/2017
marvel308,感谢您的回答。我回顾了一些疯狂的例子,并试图了解它们是如何工作的。现在我明白了这个例子。
2赞 Thomas 8/16/2017 #2

因为不会将它们与类型安全进行比较,但会强制转换值:==

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

使用 TypeSafe 比较

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

评论

0赞 Yurii Savchuk 8/16/2017
托马斯,谢谢你的回答。我回顾了一些疯狂的例子,并试图了解它们是如何工作的。现在我明白了这个例子。
0赞 evolutionxbox 8/16/2017
@YuriiSavchuk了解更多信息,研究真实和虚假的价值观。