在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)来解析;