这个表达式' ' == true返回false,这意味着' '是假的,
但是
if(' ') { console.log(' true ') } else { console.log(' false ') },得到的结果是真的.
现在我很困惑,这个空白字符串是真的还是虚假的?
saa*_*adq 10
该字符串' '是"truthy"值.
这是commmon"falsy"值的列表:
false
null
undefined
0
NaN
''
Run Code Online (Sandbox Code Playgroud)
你必须明白"truthy"与它不是一回事true.一个值可以是"真实的"而不是true.例如,如果我们这样做5 == true,我们就会得到false,即使它5是一个"真实"的价值.
一般来说,几乎所有的价值都是"真实的"(不包括上面提到的那些).但是,检查某些东西是否"真实"/"虚假"的最简单方法是做这样的事情:
var value = valueToTest;
if (value) {
console.log('Truthy!');
} else {
console.log('Falsy!');
}
Run Code Online (Sandbox Code Playgroud)
小智 7
是一串空白的真空还是虚伪的?
正如其他人指出的那样,这是真实的.但是,你的比较
' ' == true
Run Code Online (Sandbox Code Playgroud)
是不是检查是否' '是truthy.它正在比较两个值,这是一个不同的东西,并使用特定的比较规则.JS规范是任何==与布尔值的比较首先将布尔值强制转换为数字:
如果Type(y)是布尔值,则返回比较结果
x == ToNumber(y).
所以你的代码相当于
' ' == Number(true)
Run Code Online (Sandbox Code Playgroud)
这是一样的
' ' == 1
Run Code Online (Sandbox Code Playgroud)
接下来,为了比较字符串和数字,JS将字符串转换为数字.再次引用规范:
如果Type(x)是String而Type(y)是Number,则返回比较结果
ToNumber(x) == y.
所以我们现在有
Number(' ') == 1
Run Code Online (Sandbox Code Playgroud)
Number(' ')是0.规范说:
StringNumericLiteral ::: StrWhiteSpace的MV为0.
所以这就成了
0 == 1
Run Code Online (Sandbox Code Playgroud)
正如你所发现的,这是假的.有关详细信息,请参见http://ecma262-5.com/ELS5_HTML.htm#Section_11.9.3.
正如其他答案所解释的那样,不等于(==)与true虚假不同.Falsy是一个不同的概念,它大致意味着当需要布尔值(例如if语句的条件)为false 时,表达式被强制转换为的值.
| 归档时间: |
|
| 查看次数: |
2272 次 |
| 最近记录: |