我注意到如果你有以下语句:
var test = "" || null
test
将会被评估为 null
,但如果我们执行以下操作:
var test = "test" || null
test
会被解释为 "test",对于任何字符串对象也是如此,因此 JavaScript 将空字符串视为假值或空值。为什么呢?空字符串不是一个对象吗?难道不应该像其他字符串对象一样处理吗?
我已在 FireFox、Chrome、IE7/8/9 和 Node 中进行了测试。
我注意到如果你有以下语句:
var test = "" || null
test
将会被评估为 null
,但如果我们执行以下操作:
var test = "test" || null
test
会被解释为 "test",对于任何字符串对象也是如此,因此 JavaScript 将空字符串视为假值或空值。为什么呢?空字符串不是一个对象吗?难道不应该像其他字符串对象一样处理吗?
我已在 FireFox、Chrome、IE7/8/9 和 Node 中进行了测试。
JavaScript是否将空字符串视为假值或null值,如果是为什么?
是的,因为规范(§9.2)如此规定。
空字符串不还是一个对象吗?
不是。原始字符串值不是对象,只有new String("")
才是(并且会是真值)。
是的,空字符串是假值,但是new String("")
不是。
还要注意的是,很可能会出现这种情况
if (x) { ... }
if (x == false) { ... }
也会验证通过(例如,使用空数组[]
或new String("")
)。
在编程中,一个需要注意的危险问题是假值的存在,特别是在检查某个属性是否存在时。
假设你想要测试一个新属性是否可用;当这个属性实际上可以有一个值为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 */
字符串不是一个对象,它像数字或布尔值一样是一个原始类型。
空字符串、NaN、+0、-0、false、undefined 和 null 是直接转换为布尔值时会被视为 false 的唯一值。
0
、NaN
、null
、undefined
。