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

时间:2015-11-14 05:19:05

标签: javascript

此表达式' ' == true返回false,表示' '是假的,

然而  if(' ') { console.log(' true ') } else { console.log(' false ') }, 得到的结果是真的。

现在我很困惑,这个空白字符串是真的还是虚假的?

5 个答案:

答案 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开始,您将stringboolean进行比较,因此很明显这两件事完全不同,因此您可以false

返回

在第二种情况下,即if(' '),您正在检查您是否有objectnull。这里' '是一个有效的非null对象,因此你得到的结果是真的。

答案 4 :(得分:-3)

' '在ASCII中等于32。因此,' ' == true表示32 == trueif(' ')表示if (32)