2

我注意到,如果您有如下声明:

var test = "" || null

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

var test = "test" || null

test将评估为“测试”,对于任何代替字符串的对象也是如此,因此 javascript 是否将空字符串视为假值或空值,如果是,为什么?空字符串不还是一个对象,所以不应该同样处理吗?

我已经在 FireFox、Chrome、IE7/8/9 和 Node.js 中对此进行了测试。

4

5 回答 5

7

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

是的,因为规范是这样说的(§9.2)

空字符串不还是对象吗

不。原始字符串值不是对象,只有 anew String("")是(并且是真实的)

于 2013-04-22T09:56:20.007 回答
0

String is not an object, it's a primitive like number or boolean.

The empty string, NaN, +0, -0, false, undefined and null are the only values which evaluate to false in direct boolean conversion.

于 2013-04-22T09:55:22.780 回答
0

字符串不是 JS 中的对象。其他“虚假”值是:0, NaN, null, undefined.

于 2013-04-22T09:56:41.597 回答
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 */

看这里

于 2013-04-22T09:57:50.237 回答
0

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

另请注意,很可能

if (x) { ... }

已验证,但

if (x == false) { ... }

也经过验证(例如,使用空数组[]或使用时会发生这种情况new String(""))。

于 2013-04-22T10:01:04.703 回答