至少在JavaScript中,以下是真实的:
0 == [] // true
0 == false // true
![] == false // true
为什么会这样?我知道
==
表示相等但不考虑类型,但在false == true
的情况下,这句话是怎么说的呢?至少在JavaScript中,以下是真实的:
0 == [] // true
0 == false // true
![] == false // true
==
表示相等但不考虑类型,但在false == true
的情况下,这句话是怎么说的呢?当使用非严格相等运算符时,JavaScript将对象强制转换为布尔值。
该句话涉及到IT技术相关内容。0 == []
false == false
。===
,则正在检查对象的相等性。[] === []; // => false
===
检查的是对象的内存位置。两个数组没有共享相同的内存位置。但是:var arr = [];
arr === arr; // ==> true
但是,这里有另一个有趣的转折:
1 === 1; // ==> true
===
运算符检查它们是否完全相等。因此,重要的区别在于 ==
和 ===
之间的差异,以及 JavaScript 如何强制类型转换。===
运算符,如果需要防止强制类型转换(然而,有时强制类型转换可以对您有益,例如在解决跨浏览器问题时,一个值可能在一个浏览器中是undefined,在另一个浏览器中是null。然后你可以说类似于 !!thatStrangeValue
,这样,undefined
和 null
将被强制转换为相同的值)。[] == false;
![] == false;
==
表示;另一个是值和类型都相等,用===
表示。后者是严格相等运算符。[]
代表一个空对象,意味着[]
和0
具有相同的值。true
,而0的值为false
。not false
等于 true
。 - Richard Hamilton!false
表示的是 false
的相反值。而 false
的相反值就是 true
。因此,!false === true
。 - Josh Beam
[] == true
的结论,因为它应该是false
。 - Matt Burland[] == true
和![]
不是相同的操作。 - Matt Burland==
运算符不能保证是传递性的。 - Nayuki