我们都知道JavaScript是一个非常有趣的语言,它有棘手的部分。 请解释它是如何工作的,如果可能的话:[ ]
等于![ ]
。为什么Array不等于数组(javascript)?
[ ] == ![ ] // -> true
我不明白,为什么结果是"true"
?
我们都知道JavaScript是一个非常有趣的语言,它有棘手的部分。 请解释它是如何工作的,如果可能的话:[ ]
等于![ ]
。为什么Array不等于数组(javascript)?
[ ] == ![ ] // -> true
我不明白,为什么结果是"true"
?
因为==
并不比他们的类型安全的,但价值得到铸造:
[] == ![]
//is
[] == false
//is casted into
"" == false
//and that into
false == false
//wich is
true
使用类型安全的比较
console.log(`[] == ![]`, [] == ![])
console.log(`[] === ![]`, [] === ![])
在我看来,使用==
的唯一原因是,当你对CHACK或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
托马斯,谢谢你的回答。我回顾了一些疯狂的例子,并试图了解它们是如何工作的。现在我明白这个例子。 –
@YuriiSavchuk了解更多信息,研究真谛和谬误的价值。 – evolutionxbox
当您调用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);
这是它是如何在内部调用,请查看this answer 更多细节
marvel308,谢谢你的回答。我回顾了一些疯狂的例子,并试图了解它们是如何工作的。现在我明白这个例子。 –
因为数组中的JavaScript是一种对象。 [见Mozilla CDN数组](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) –