gpt4 book ai didi

javascript - 非属性赋值变量是可删除的

转载 作者:行者123 更新时间:2023-11-29 10:20:29 25 4
gpt4 key购买 nike

我正在阅读 this article在 Javascript delete 方法上,并尝试了这段代码:

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 对象的属性。那不是真的。考虑以下代码段:

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是window的一个属性,但是还是不可删除的。 delete 是否成功的标准不是变量是否是某物的属性(这始终为真),而是该属性是否具有 DontDelete 属性集。

最佳答案

delete x 无效,因为它未解析为任何对象属性。

y 解析为 window 对象的属性。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/delete :

delete expression

where expression should evaluate to a property reference

关于javascript - 非属性赋值变量是可删除的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13211913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com