为什么当'0'== false时!!'0'== true

时间:2019-08-07 19:20:01

标签: javascript

根据我的理解,问题已全部解决!! false = false

然后,如果

0 == false // true 
'0' == false // true 

为什么

!!0 == false 
!!'0' == true

3 个答案:

答案 0 :(得分:1)

字符串零('0')是真实值

!!'0' == true

!'0' -> !false -> true

所以你实际上在做

true == true

答案 1 :(得分:0)

您似乎偶然发现了===运算符的重要性。

'0' == false;  // true
'0' === false; // false

Boolean('0');  // true

typeof('0');   // string
typeof(!'0');  // boolean

!'0' === false; // true
!!'0' === false // false

答案 2 :(得分:-1)

第一个否定通过调用抽象函数'0'将字符串ToBoolean转换为布尔值。根据{{​​1}} specification,只有7个值被评估/强制/转换为false,即是虚假的: JavaScriptnullundefined,空字符串,NaN+0-0

因此,false被评估为真,'0'被评估为!'0'false被评估为真。

PS :OP在原始注释之后的以下注释中提出了另一种情况,为什么将!!'0'评估为'0' == false。即使与原始帖子无关,这里也有解释:

在规范中,第Abstract Equality Comparison节内容为:“ 在评估true时,如果x == y的类型为y,请首先转换Booleany,然后再次进行比较”。

因此,Number被评估为Number(false)。在下一次比较中,将字符串0与数字'0'(即0)进行比较。规范说将字符串转换为数字,然后再次进行比较:'0' == 0