根据 EcmaScript 规范,由于 DontDelete 内部参数,某些对象属性无法删除。例如 :
var y = 5
不应该被删除。但从我能够检查的情况来看 - 它是。
这是 Mozilla 开发人员中心的链接: https ://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/delete
任何想法为什么这不能正常工作?
根据 EcmaScript 规范,由于 DontDelete 内部参数,某些对象属性无法删除。例如 :
var y = 5
不应该被删除。但从我能够检查的情况来看 - 它是。
这是 Mozilla 开发人员中心的链接: https ://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/delete
任何想法为什么这不能正常工作?
有时您必须检查您阅读的内容。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 的出色回答。
根据 ES5 表 17:
CreateMutableBinding(N, D) 在环境记录中创建一个新的可变绑定。字符串值 N 是绑定名称的文本。如果可选的布尔参数 D 为真,则绑定可能随后被删除。
并在 10.5 声明绑定实例化
- 对于代码中的每个 VariableDeclaration 和 VariableDeclarationNoIn d,按源文本顺序执行 [...] 调用 env 的 SetMutableBinding 具体方法,传递 dn、undefined 和 strict 作为参数。
这对我说,声明的变量不应该是可删除的。在全局代码中,全局对象是变量对象的激活对象,因此声明的全局变量不应该是可删除的。当然,浏览器可能不遵守...
var y = 5
alert(delete (y));
显示假。然后,无法删除。