我注意到如果您有以下声明:
var test = "" || null
test
将评估为null
,但如果我们执行以下操作:
var test = "test" || null
test
将评估为“test”,对于代替字符串的任何对象也是如此,因此javascript将空字符串视为falsy或null值,如果是,为什么呢?不是一个空字符串仍然是一个对象,所以它不应该被处理相同吗?
我在FireFox,Chrome,IE7 / 8/9和Node中对此进行了测试。
答案 0 :(得分:3)
javascript是否将空字符串视为falsy或null值,如果是,为什么?
是的,因为the spec says so (§9.2)。
不是空字符串仍然是对象
没有。原始字符串值不是对象,只有new String("")
(并且将是真实的)
答案 1 :(得分:0)
String不是一个对象,它是一个像数字或布尔的原语。
空字符串NaN,+ 0,-0,false,undefined和null是在直接布尔转换中求值为false的唯一值。
答案 2 :(得分:0)
字符串不是JS中的对象。其他“虚假”值包括:0
,NaN
,null
,undefined
。
答案 3 :(得分: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 */
答案 4 :(得分:0)
是的,空字符串是假的,但new String("")
不是。
另请注意,
很可能if (x) { ... }
已经过验证,但
if (x == false) { ... }
也经过验证(例如,使用空数组[]
或new String("")
)。