我注意到,如果您有如下声明:
var test = "" || null
test
将评估为,null
但如果我们执行以下操作:
var test = "test" || null
test
将评估为“测试”,对于任何代替字符串的对象也是如此,因此 javascript 是否将空字符串视为假值或空值,如果是,为什么?空字符串不还是一个对象,所以不应该同样处理吗?
我已经在 FireFox、Chrome、IE7/8/9 和 Node.js 中对此进行了测试。
我注意到,如果您有如下声明:
var test = "" || null
test
将评估为,null
但如果我们执行以下操作:
var test = "test" || null
test
将评估为“测试”,对于任何代替字符串的对象也是如此,因此 javascript 是否将空字符串视为假值或空值,如果是,为什么?空字符串不还是一个对象,所以不应该同样处理吗?
我已经在 FireFox、Chrome、IE7/8/9 和 Node.js 中对此进行了测试。
javascript 是否将空字符串视为假值或空值,如果是,为什么?
是的,因为规范是这样说的(§9.2)。
空字符串不还是对象吗
不。原始字符串值不是对象,只有 anew String("")
是(并且是真实的)
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.
字符串不是 JS 中的对象。其他“虚假”值是:0
, NaN
, null
, undefined
.
您必须注意的一个危险的错误值问题是在检查某个属性的存在时。
假设你想测试一个新属性的可用性;当这个属性实际上可以有 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 */
是的,空字符串是虚假的,但new String("")
不是。
另请注意,很可能
if (x) { ... }
已验证,但
if (x == false) { ... }
也经过验证(例如,使用空数组[]
或使用时会发生这种情况new String("")
)。