Javascript中的delete操作符
这篇文章深入剖析了JavaScript中`delete`操作符的行为,特别是它与变量、对象属性之间微妙而关键的互动关系。作者从一个核心矛盾出发:看似等价的全局变量和对象属性,在`delete`面前却表现迥异。 核心差异在于,通过`var`声明的变量和函数声明都带有`dontdelete`特性,因此它们无法被`delete`操作符移除。相比之下,直接在对象上创建的属性(无论是自定义的还是来自原型链的)则可以被轻松删除。文章通过一系列精准的代码示例展示了这种区别,例如`delete global`对`var global`无效,但`delete obj`却能移除一个未用`var`声明的全局变量(它本质上是`window`对象的属性)。 此外,文章还细致地探讨了`delete`操作符的几个边界情况:它无法删除原型(prototype)中定义的属性或对象自带的属性(如`length`);在`eval`执行的代码中,通过`var`声明的变量反而失去了`dontdelete`保护,可以被删除;而`delete`的返回值(`true`/`false`)更多反映了操作是否成功,而非属性是否真的存在。理解这些细节,对于避免JavaScript中关于删除操作的常见陷阱至关重要。