是 JavaScript 中的一串空白真或假
Is a string of whitespace truthy or falsy in JavaScript?
这个表达式' ' == 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
中,您正在将string
与boolean
进行比较,因此很明显这两件事是完全不同的,因此您可以返回false
在第二种情况下,即 if(' ')
您正在检查您是否有object
或null
。这里' '
是一个有效的非空对象,因此你得到的结果为 true。
' '
在ASCII中等于32。 所以,' ' == true
表示32 == true
,if(' ')
"表示if (32)
。
- 如何将返回一串数字的 JSON 属性转换为日期
- 在一串数字中查找特定值
- 如何将一串数字转换为数组
- javascript对象(如array&一串
- 如何用Javascript生成一串数字和字母
- 加载一串 markdown 属性作为 JavaScript 对象
- 为什么一串数字的工作方式与新日期中的实际数字不同
- 如何将一串数字和数学运算符变成整数答案?- JavaScript
- 传给玉的东西最后是一串
- 色调转换一串颜色
- 如何在饼干中剪下一串字母
- 如何用'null'一串
- 是 JavaScript 中的一串空白真或假
- Node JS -在一个新进程中执行一串代码
- 有没有任何字符串方法,能让我把一串数字,转换成一串数字和字母
- 一串没有RegEX的Match()
- 对一串数字进行排序,每个数字里面都有一个字母.确保在原始数组中保持相同的重复项位置
- 在javascript中创建一串数字,每个数字都有限制
- 我如何从一串用冒号分隔的角色中获得数据
- 如何获取一串参数并返回其中包含的点数(.)