是 JavaScript 中的一串空白真或假

Is a string of whitespace truthy or falsy in JavaScript?

本文关键字:空白 一串 JavaScript      更新时间:2023-09-26

这个表达式' ' == true返回false,这意味着' '是假的,

然而 if(' ') { console.log(' true ') } else { console.log(' false ') } ,获取结果为真。

现在我很困惑,那一串空白是真的还是假的?

字符串' '是一个"真实"值。

以下是"虚假"值的列表:

false
null
undefined
0
NaN
''

你必须明白,"真实"与true不是一回事.值可以是"真实的",而不必true。例如,如果我们做5 == true,我们会得到false,即使5是一个"真实"值。

一般来说,几乎每个值都是"真实的"(不包括上面提到的值(。但是,检查某些东西是否"真实"/"虚假"的最简单方法是执行以下操作:

var value = valueToTest;
if (value) {
  console.log('Truthy!');
} else {
  console.log('Falsy!');
}

一串空白是真的还是假的?

正如其他人所指出的那样,这是真实的。但是,您的比较

' ' == true

检查' '是否真实。它比较两个值,这是不同的东西,并使用特定的比较规则。JS规范是,任何与布尔值的==比较首先将布尔值强制为一个数字:

如果 Type(y( 为布尔值,则返回比较结果 x == ToNumber(y)

所以你的代码等效于

' ' == Number(true)

这与

' ' == 1

接下来,为了比较字符串和数字,JS 将字符串转换为数字。再次引用规范:

如果 Type(x( 是字符串,Type(y( 是数字,则返回比较结果ToNumber(x) == y

所以我们现在有

Number(' ') == 1

Number(' ')0.规范说:

StringNumericLiteral 的 MV ::: StrWhiteSpace 是 0。

所以这变成了

0 == 1

正如你发现的,这是错误的。有关详细信息,请参阅 http://ecma262-5.com/ELS5_HTML.htm#Section_11.9.3。

正如其他答案所解释的那样,不等于(==(true并不等同于虚假。Falsy是一个不同的概念,它大致意味着当需要布尔值(例如if语句的条件(时表达式被强制到的值为false。

在第一种情况下的表达式中,您将' ' 空格字符串与布尔值 true 进行比较,这肯定会导致 false,因为 ' ' 不等于 true。

第二种情况下的表达式中,您只需在条件签入 if 语句中写入 ' ' 空格。 根据 if 语句的执行规则,如果存在值,它将计算为 true。 并且空格字符不为 null,因此它将执行 true 语句的代码块。

希望这会有所帮助。

如果直接放置在 if 语句测试中,则以下值的计算结果为 false。

false
null
nil
undefined
NaN
''
0

上述值以外的值的计算结果为 true

从您的代码' ' == true中,您正在将stringboolean进行比较,因此很明显这两件事是完全不同的,因此您可以返回false

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

' '

ASCII中等于32。 所以,' ' == true表示32 == trueif(' ')"表示if (32)