字符串到布尔转换行为

时间:2014-01-07 18:40:02

标签: javascript

是否所有非空字符串都评估为true?

来自ECMAScript

Table 11 - ToBoolean Conversions

Undefined: false
Null: false
Boolean: The result equals the input argument (no conversion).
Number: The result is false if the argument is +0, -0, or NaN; otherwise the result is true.
String: The result is false if the argument is the empty String (its length is zero); otherwise the result is true.
Object: true

答案应该是肯定的。但后来我想知道为什么:

alert(" " == false); 

返回 true 。 {与"\t\n\r"}

相同的结果

我没有任何特定的用例,我只是想知道它。

2 个答案:

答案 0 :(得分:1)

这是因为JavaScript将只有空格的字符串描述为将 toNumber 转换为0

您可以使用一元+运算符对此进行测试:

console.log(+"\t\n\r"); // 0

因为==并不像 toBoolean 转换那么简单,所以你得到的结果与!!"\t\n\r"时的结果不同,其中< em> toBoolean 转换将所有非空字符串视为true

==与不同类型的操作数一起使用时,算法通常强制降低类型,直到它们都是数字。这就是 toNumber 转换与此相关的原因。

答案 1 :(得分:1)

  

StringNumericLiteral为空或仅包含空格,将转换为+0。

请参阅您链接的PDF中的第44页