刪除是否有任何目的不能通過重新分配給未定義?
是的。如果您想從原型中取消屏蔽屬性或導致in
,hasOwnProperty
和for (...in...)
未將該屬性記錄爲存在,則delete
是合適的。
var set = {};
set._x = true;
alert('_x' in set); // true
set._x = undefined;
alert('_x' in set); // true
delete set._x;
alert('_x' in set); // false
編輯:作爲T.J.克勞德說明:
的delete
操作的目的是從物體完全刪除一個屬性,而屬性設置爲undefined
只是將該屬性設置爲undefined
。
這很重要,在自己的權利,但是當你使用繼承,因爲如果Ø與P派生它也很重要,
var P = { prop: 42 };
var O = Object.create(P); // P is O's prototype.
當您檢索O.prop
,你會得到道具的價值如果O具有該名稱的屬性(即使其值未定義),則從O開始,但如果O根本沒有該屬性,則將從P.prop
中檢索該值。
alert(O.prop); // "42" since O doesn't have its own prop, but P does.
O.prop = undefined;
alert(O.prop); // "undefined" since O has its own prop.
delete O.prop;
alert(O.prop); // "42" since the delete "unmasked" P.prop.
'delete'的行爲根本不復雜。但它真的**不應該被稱爲'刪除'。 JavaScript在語法上類似於C++,使用運算符C++只能做一些*完全不同的事情,這有點像oops,導致了所有這些混亂。 (如果它被稱爲「刪除」,我敢打賭人們不會那麼困惑。) –
http://perfectionkills.com/understanding-delete/ – Raghu