2

如果我在使用 Spidermonkey 1.8 的 JSDB 1.8 中执行此操作:

 this.x = 3;
 var y = 4;
 function z() { return 77; }
 this.w = function w() { return 44; }
 this.v = function v() { return 55; }
 w = function w() { return 66; }
 function v() { return 77; }
 delete x;
 delete y;
 delete z;
 delete w;
 delete v;

truedelete xanddelete w线得到,但从false​​and delete yanddelete z线得到delete v

这里发生了什么,这种行为是在 ECMAscript 标准中还是在 Spidermonkey 中定义的?我想从特定范围中删除一个函数,但发现我做不到。

4

3 回答 3

1

在此处阅读删除的完整详细说明 http://perfectkills.com/understanding-delete/

于 2012-04-02T17:32:54.553 回答
1

另一个描述这种行为的好链接来自 MDN https://developer.mozilla.org/en/JavaScript/Reference/Operators/delete

这表明在全局命名空间中使用 var 关键字定义的变量不能被删除。

但是如果您使用的是 javascript 1.8.5,那么您可以使用 Object 的 defineProperty 方法来创建可以通过将可配置选项设置为 true 来删除的属性

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty

于 2012-04-02T17:48:00.003 回答
0

正如 Helmus 发布的链接所解释的那样,从广义上讲(正如文章所讨论的那样,该领域存在一些跨浏览器的怪癖),变量不能被删除,但属性可以。

请注意,在全局范围内,未使用 var 关键字声明的变量被视为全局对象的属性。所以:

var global_var1 = 'some val';
global_var2 = 'some val';
delete global_var1; //false
delete global_var2; //true
typeof global_var1; //'string'
typeof global_var2; //'undefined'
于 2012-04-02T17:31:15.200 回答