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

时间:2017-08-16 07:34:09

标签: javascript arrays boolean comparison boolean-logic

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

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

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

2 个答案:

答案 0 :(得分:2)

因为==并不比较它们的类型安全,但是这些值会被投放:

[] == ![]
//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

答案 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  了解更多详情