5

根据 EcmaScript 规范,由于 DontDelete 内部参数,某些对象属性无法删除。例如 :

var y = 5

不应该被删除。但从我能够检查的情况来看 - 它是。

这是 Mozilla 开发人员中心的链接: https ://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/delete

任何想法为什么这不能正常工作?

4

3 回答 3

2

有时您必须检查您阅读的内容。ECMA 规范 (262, ed 5)中没有DontDelete内部参数。也许 [ Configurable] 属性是什么意思?delete运算符不适用于变量或函数,它适用于对象属性:

var y=5, 
    z = {y:5};
delete y;
delete z.y;
alert(y);   //=> 5
alert(z.y); //=> undefined

从我的回答中,出现了这个SO 问题,以及来自 TJ Crowder 的出色回答。

于 2011-05-13T07:11:02.773 回答
1

根据 ES5 表 17:

CreateMutableBinding(N, D) 在环境记录中创建一个新的可变绑定。字符串值 N 是绑定名称的文本。如果可选的布尔参数 D 为真,则绑定可能随后被删除。

并在 10.5 声明绑定实例化

  1. 对于代码中的每个 VariableDeclaration 和 VariableDeclarationNoIn d,按源文本顺序执行 [...] 调用 env 的 SetMutableBinding 具体方法,传递 dn、undefined 和 strict 作为参数。

这对我说,声明的变量不应该是可删除的。在全局代码中,全局对象是变量对象的激活对象,因此声明的全局变量不应该是可删除的。当然,浏览器可能不遵守...

于 2011-05-13T08:02:44.633 回答
0
var y = 5
alert(delete (y));

显示。然后,无法删除。

于 2011-05-13T06:55:20.183 回答