我在想这个问题:
这两个有什么区别吗?
delete obj.someProperty
并且
obj.someProperty=undefined
我在想这个问题:
这两个有什么区别吗?
delete obj.someProperty
并且
obj.someProperty=undefined
undefined
,而第一个版本则从对象中删除键。当迭代对象或使用in
关键字时,可以看到这种差异。var obj = {prop: 1};
'prop' in obj; // true
obj.prop = undefined;
'prop' in obj; // true, it's there with the value of undefined
delete obj.prop;
'prop' in obj; // false
当迭代对象时,两者的区别将会被注意到。删除属性时,它不会包含在循环中,而仅仅将值更改为未定义将包含在内。对象的长度或迭代次数将有所不同。
这里有一些关于JavaScript删除的很棒(尽管高级)信息:
使用delete
将从对象中实际删除键本身。如果您将值设置为undefined
,则键仍然存在,但是只有值发生了更改。
前者实际上会删除该属性,后者则会将其保留但设置为undefined
。
如果您循环遍历所有属性(for (props in obj) { }
)或测试其中一个属性的存在性(if ('someProperty' in obj) {}
),这就变得重要了。