JavaScript 有不同的相等性 comparison operators
- 等于
==
- 严格等于
===
它还有一个 logical NOT !
我倾向于考虑使用双重逻辑非,!!x
,与true == x
基本相同.
但是我知道情况并非总是如此,例如x = []
因为[]
!
是真实的但是对于 ==
来说虚假 .
所以,对于x
我们会 (true == x) === !!x
给假?或者,==
的 falsy 是什么?但不是 !!
(反之亦然)?
最佳答案
"So, for which
x
s would(true == x) === !!x
givefalse
?"
任何 x
,其 bool 转换与 Abstract Equality Comparison Algorithm 的转换不同.
一个例子是一个只有空格的字符串:
var x = " ";
它的 bool 转换是 true
(与任何非空字符串的情况一样),但它的 ==
比较是 false
因为只有空格的字符串将被转换为数字 0
,而 true
值将被转换为数字 1
,并且这些值不相等。
x == true; // false
!!x; // true
或显示 ==
正在比较的最终值:
Number(true) == Number(x);
// 1 == 0
1 == 0; // false
并显示 !!x
的结果,它等同于:
Boolean(x); // true
因此您的原始表达式可以粗略地如下所示:
var x = " ";
(Number(true) == Number(x)) === Boolean(x);
// ( 1 == 0 ) === true
// ( false ) === true
false === true; // false
我说“粗略地”是因为这肯定不会捕获上面链接的算法的所有细节,并且提供给操作数的所有值都不会相同。
要了解 ==
如何处理其操作数,您确实需要稍微研究一下算法。
关于javascript - (true == x) === !!x 什么时候为假?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13553222/