前一陣子在討論刪除一個變數的屬性值,應該用 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
Leave a Reply