2017-08-16 107 views
-1

我们都知道JavaScript是一个非常有趣的语言,它有棘手的部分。 请解释它是如何工作的,如果可能的话:[ ]等于![ ]为什么Array不等于数组(javascript)?

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

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

+0

因为数组中的JavaScript是一种对象。 [见Mozilla CDN数组](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) –

回答

2

因为==并不比他们的类型安全的,但价值得到铸造:

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

使用类型安全的比较

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

在我看来,使用==的唯一原因是,当你对CHACK或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

托马斯,谢谢你的回答。我回顾了一些疯狂的例子,并试图了解它们是如何工作的。现在我明白这个例子。 –

+0

@YuriiSavchuk了解更多信息,研究真谛和谬误的价值。 – evolutionxbox

0

当您调用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 更多细节

+0

marvel308,谢谢你的回答。我回顾了一些疯狂的例子,并试图了解它们是如何工作的。现在我明白这个例子。 –

相关问题