如JS主题中所述,Good Parts似乎声称不能定义属性值.但是,如果您在Chrome的控制台中执行以下操作,例如:
var foo = {}
foo.bar = undefined
foo
Run Code Online (Sandbox Code Playgroud)
然后单击以展开foo对象,您仍然可以看到foo包含一个名为bar的属性,其值为undefined.当然,从Javascript方面来看,你无法区分foo.bar返回undefined和foo.unexistingproperty返回undefined之间的区别.但是控制台仍然坚持设置为未定义的属性有什么意义呢?
现有属性和未定义属性与不存在属性之间存在差异,因此Chrome在这里是明智的.如果为属性赋值,则该属性基本上存在于该对象中.一个区别是已明确设置为未定义的属性将显示在for...in
循环中:
var foo = {};
foo.bar = undefined;
// The following will alert "bar"
for (var i in foo) {
alert(i);
}
Run Code Online (Sandbox Code Playgroud)
另一个是"bar" in foo
将返回true
,也将返回foo.hasOwnProperty("bar")
.