在JavaScript中,空字符串是否被视为假值?

6

我注意到如果你有以下语句:

var test = "" || null

test 将会被评估为 null,但如果我们执行以下操作:

var test = "test" || null

test 会被解释为 "test",对于任何字符串对象也是如此,因此 JavaScript 将空字符串视为假值或空值。为什么呢?空字符串不是一个对象吗?难道不应该像其他字符串对象一样处理吗?

我已在 FireFox、Chrome、IE7/8/9 和 Node 中进行了测试。


2
http://www.sitepoint.com/javascript-truthy-falsy/ - Rikonator
5个回答

12

JavaScript是否将空字符串视为假值或null值,如果是为什么?

是的,因为规范(§9.2)如此规定。

空字符串不还是一个对象吗?

不是。原始字符串值不是对象,只有new String("")才是(并且会是真值)。


啊,现在更有意义了,谢谢!对我来说,将空字符串设为假值似乎仍然是一个奇怪的决定,但我想我必须习惯将字符串视为原始类型而不是对象。 - AgentRegEdit

1

是的,空字符串是假值,但是new String("")不是。

还要注意的是,很可能会出现这种情况

if (x) { ... }

已验证,但
if (x == false) { ... }

也会验证通过(例如,使用空数组[]new String(""))。


0

在编程中,一个需要注意的危险问题是假值的存在,特别是在检查某个属性是否存在时。

假设你想要测试一个新属性是否可用;当这个属性实际上可以有一个值为0或""时,你不能简单地使用

来检查它的可用性。
 if (!someObject.someProperty)
    /* incorrectly assume that someProperty is unavailable */
In this case, you must check for it being really present or not:

if (typeof someObject.someProperty == "undefined")
    /* now it's really not available */

点击这里


0

字符串不是一个对象,它像数字或布尔值一样是一个原始类型。

空字符串、NaN、+0、-0、false、undefined 和 null 是直接转换为布尔值时会被视为 false 的唯一值。


0
在JS中,字符串不是一个对象。其他“falsy”值包括:0NaNnullundefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接