【发布时间】:2012-10-24 02:19:24
【问题描述】:
我正在阅读 Javascript delete 方法上的 this article,并尝试了以下代码:
function f(){
var x = "abcd";
console.log(delete x); //returns false, because x has DontDelete attribute
y = "abcd";
console.log(delete y); //returns true, but I didn't explicitly assign y as a property
}
这很奇怪,因为我没有使用y 的属性分配(如:window.y="abcd";),文章claims 是您如何创建属性deleteable。
为什么y 没有DontDelete 属性?
更新:
在下面的答案中,声称 y 是可删除的,仅仅是因为它是 window 对象的属性。那不是真的。考虑以下 sn-p:
function f() {
var functionx = "abcd";
console.log(delete functionx); //returns false, because x has DontDelete attribute
functiony = "abcd";
console.log(delete functiony); //returns true, but I didn't explicitly assign functiony as a property to the window
}
//take 1
var globalx = "abcd";
console.log(this.globalx);//to prove x is a property of the global
console.log(delete globalx);//fails, even though x is a property of the window
//take 2
this.globaly = "abcd";
console.log(this.globaly);//to prove y is a property of the global
console.log(delete globaly);//succeeds, because I used property assignment
f();
在 take 1 中,globalx 是窗口的一个属性,但它仍然是不可删除的。 delete 是否成功的标准不是变量是否是某物的属性(始终为真),而是该属性是否具有DontDelete 属性集。
【问题讨论】:
-
当我run the edited code 时,我当然不会得到你描述的结果。我认为给出的答案仍然有效。
-
@KendallFrey 您需要将脚本放在正文中,而不是放在 onLoad 事件中。这是一个更新的小提琴:jsfiddle.net/jpF73/2 另外,我不小心错过了
localx旁边的var
标签: javascript properties attributes