2011-05-20 62 views
4

只是想知道这一个:JavaScript属性缺失

请告诉我差,或者是有区别可言,之间:

delete obj.someProperty 

obj.someProperty=undefined 

回答

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

的差异会实现迭代对象时。当删除属性时,它不会被包含在循环中,而只是将值更改为undefined将包含它。对象的长度或迭代次数将会不同。

这里是在JavaScript中删除一些伟大的(尽管是先进的)信息:

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

+0

感谢您的链接,这是什么,我完全低估:)存在 – sitifensys 2011-05-20 14:17:54

2

使用delete实际上将删除该对象的密钥本身。如果将值设置为undefined,则它们的键仍然存在,但该值是唯一已更改的值。

2

前者将实际删除属性,后者将离开它,但它设置为undefined

这将成为显著如果你遍历所有属性(for (props in obj) { })或测试的一个(if ('someProperty' in obj) {}