此表达式' ' == true
返回false
,表示' '
是假的,
然而
if(' ') { console.log(' true ') } else { console.log(' false ') }
,
得到的结果是真的。
现在我很困惑,这个空白字符串是真的还是虚假的?
答案 0 :(得分:10)
字符串' '
是一个“truthy”值。
以下是commmon“falsy”值列表:
false
null
undefined
0
NaN
''
你必须明白“truthy”与true
不是一回事。一个值可以是“真实的”而不是true
。例如,如果我们执行了5 == true
,即使false
是“真实的”值,我们也会获得5
。
一般来说,几乎所有的价值都是“真实的”(不包括上面提到的那些)。但是,检查某些东西是否“真实”/“虚假”的最简单方法是做这样的事情:
var value = valueToTest;
if (value) {
console.log('Truthy!');
} else {
console.log('Falsy!');
}
答案 1 :(得分:7)
是一串空白的真空还是虚伪的?
正如其他人指出的那样,这是真实的。但是,你的比较
' ' == true
不检查' '
是否真实。它正在比较两个值,这是一个不同的东西,并使用特定的比较规则。 JS规范是,与布尔值的任何==
比较首先将布尔值强制转换为数字:
如果Type(y)是布尔值,则返回比较结果
x == ToNumber(y)
。
所以你的代码相当于
' ' == Number(true)
与
相同' ' == 1
接下来,为了比较字符串和数字,JS将字符串转换为数字。再次引用规范:
如果Type(x)是String而Type(y)是Number,则返回比较结果
ToNumber(x) == y
。
所以我们现在有了
Number(' ') == 1
Number(' ')
是0
。规范说:
StringNumericLiteral ::: StrWhiteSpace的MV为0。
所以这就变成了
0 == 1
,正如您所发现的那样,是假的。有关详细信息,请参阅http://ecma262-5.com/ELS5_HTML.htm#Section_11.9.3。
正如其他答案所解释的那样(==
)与true
不相等并不是假的。 Falsy是一个不同的概念,它大致意味着当需要布尔值(例如if
语句的条件)为false时,表达式被强制转换为的值。
答案 2 :(得分:-1)
在第一个案例表达式中,您将''空格字符串与bool值true进行比较,这肯定会导致false,因为''不等于true。
在第二种情况表达式中,您只是在if语句中的条件检查中写入''空格。根据if语句的执行规则,如果存在值,它将评估为true。并且空格字符不为null,因此它将为true语句执行代码块。
希望这会有所帮助。
如果直接放在if语句测试中,以下值将被评估为false。
responseJSON = r.json()
除上述值之外的值将评估为真
答案 3 :(得分:-3)
从您的代码' ' == true
开始,您将string
与boolean
进行比较,因此很明显这两件事完全不同,因此您可以false
在第二种情况下,即if(' ')
,您正在检查您是否有object
或null
。这里' '
是一个有效的非null对象,因此你得到的结果是真的。
答案 4 :(得分:-3)
' '
在ASCII中等于32。因此,' ' == true
表示32 == true
,if(' ')
表示if (32)
。