在javascript中,我們有時(shí)候要使用delete刪除對(duì)象。但是,對(duì)于delete的一些細(xì)節(jié)我們未必盡知。昨天,看到kangax分析delete的文章,獲益匪淺。本文將文章的精華部分翻譯出來,與各位分享。
原理
為什么我們能刪除一個(gè)對(duì)象的屬性?
var
o = { x: 1 };
delete
o.x;
// true
o.x;
// undefined
但是,像這樣聲明的變量則不行:
var
x = 1;
delete
x;
// false
x;
// 1
或者如此聲明的函數(shù):
function
x(){}
delete
x;
// false
typeof
x;
// "function"
注意,當(dāng)一個(gè)屬性不能被刪除時(shí),
delete
只返回false。
要理解這一點(diǎn),我們首先需要掌握像變量實(shí)例化和屬性特性這樣的概念--遺憾的是這些在關(guān)于javascript的書中很少講到。我將在接下來的幾個(gè)段落中試著簡明的重溫這些概念。 理解它們一點(diǎn)也不難,如果你不在乎它們?yōu)槭裁催@么運(yùn)行,你可以隨意的跳過這一章。
代碼類型
在ECMAScript中有三種類型的可執(zhí)行代碼:全局代碼(Global code)、函數(shù)代碼(Function code)和Eval code。這些類型有那么點(diǎn)自我描述,但這里還是作一個(gè)簡短的概述:
<p onclick="...">
)通常被當(dāng)作函數(shù)代碼(Function code)來解析;