2014-01-07 122 views
1

是否所有非空字符串评估为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); 

回报真正。 {与"\t\n\r"}相同的结果}

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

+3

见我的答案在这里:http://stackoverflow.com/questions/10376179/n-t-r-0-is-true/10377034。 'false'被转换为'0'。 –

+0

@FelixKling thx,我搜索了,找不到它。 –

+0

好吧,我投票结束因为重复的问题...;)会接受第一个答案。 Thx给大家。 –

回答

1

这是因为JavaScript描述了只有空白字符串,因为转换为0

您可以使用一元+运营商测试:

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

因为==是不作为toBoolean转换那么简单,因为你想,如果你没有,你没有得到相同的结果!!"\t\n\r",其中至布尔型转换将所有非空字符串视为true

==与不同类型的操作数一起使用时,算法通常会使用,直到它们都是数字为止。这就是为什么转换为转换与此处相关的原因。

+0

@ A.Wolff:是的,这是一个只有空白字符串的例子。那些转义序列只是字面语法的一部分。结果字符串将只有空白。 :-) –

+1

哎呀,明白了! –

1

空的或仅包含空白的StringNumericLiteral转换为+0。

参见第44页的PDF您链接

+0

该死的,thx!第44页,注意到 –

+0

http://stackoverflow.com/questions/4216362/javascript-white-space-string-boolean-conversion获得更详细的答案 – Mirco

+0

我只能接受一个答案,但猜你知道那个:( –