JavaScript中是否有一串空白或虚假的空格?

Joh*_*hen 4 javascript

这个表达式' ' == 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 时,表达式被强制转换为的值.