前一陣子在討論刪除一個變數的屬性值,應該用 delete
還是設為 undefined
呢?
讓我們來看看兩種作法差別在哪
- undefined
單純只是將屬性值改為undefined
,屬性仍然存在.
var obj = { a: "123" };
obj.a = undefined;
obj.hasOwnProperty("a"); // true
for (key in obj) {
console.log(key);
} // a
- delete
刪除此 Object 的屬性
var obj = { a: "123" };
delete obj.a;
obj.hasOwnProperty("a"); // false
for (key in obj) {
console.log(key);
} // 不會印任何東西
直覺看起來好像 delete 可以準確的刪除此屬性值,但有個要注意的地方是
delete
並不會刪除 prototype chain 的屬性值
舉個例子:
var obj = Object.create({ a: "123" });
obj.a = "456";
delete obj.a;
obj.hasOwnProperty("a"); // false
for (key in obj) {
console.log(key);
} // a
因此可能要注意的是,如果要避開 prototype chain 上面的屬性值
必須要使用 hasOwnProperty
進一步檢查屬性值 XD
參考資料:
https://stackoverflow.com/questions/14967535/delete-a-x-vs-a-x-undefined