如果我在使用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;
我从true
和delete x
行获得delete w
,但来自false
和delete y
以及delete z
的{{1}}线。
这里发生了什么,这种行为是在ECMAscript标准中还是在Spidermonkey中定义的?我想从特定范围中删除一个函数,发现我不能。
答案 0 :(得分:1)
在此处阅读删除的详细说明 http://perfectionkills.com/understanding-delete/
答案 1 :(得分:1)
描述此行为的另一个好方法是来自MDN https://developer.mozilla.org/en/JavaScript/Reference/Operators/delete
表示无法删除在全局命名空间中使用var关键字定义的变量。
但是如果您使用的是javascript 1.8.5,那么您可以使用Object的defineProperty方法创建可以通过设置可配置选项删除的属性
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty
答案 2 :(得分: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'