JavaScript 属性删除

4

我在想这个问题:

这两个有什么区别吗?

delete obj.someProperty

并且

obj.someProperty=undefined
4个回答

5
第二个版本将属性设置为现有值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

3

当迭代对象时,两者的区别将会被注意到。删除属性时,它不会包含在循环中,而仅仅将值更改为未定义将包含在内。对象的长度或迭代次数将有所不同。

这里有一些关于JavaScript删除的很棒(尽管高级)信息:

http://perfectionkills.com/understanding-delete/


谢谢提供链接,这是我完全低估了的东西 :) - sitifensys

2

使用delete将从对象中实际删除键本身。如果您将值设置为undefined,则键仍然存在,但是只有值发生了更改。


2

前者实际上会删除该属性,后者则会将其保留但设置为undefined

如果您循环遍历所有属性(for (props in obj) { })或测试其中一个属性的存在性(if ('someProperty' in obj) {}),这就变得重要了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接