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