是否所有非空字符串都评估为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"
}
我没有任何特定的用例,我只是想知道它。
答案 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页