2011-05-20 66 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) {}