gpt4 book ai didi

javascript - JS 窗口变量声明和行为

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

我有两个声明不同的全局变量。我想既然它们都是窗口对象的属性,它们的行为应该是一样的。但事实并非如此。我只能删除其中一个,即明确声明为窗口属性的那个。不能删除由var 运算符声明的那个:

window.y1 = 'Y1';
"Y1"
var y2 = 'Y2';
undefined
y1;
"Y1"
y2;
"Y2"
window.y1;
"Y1"
window.y2;
"Y2"
delete window.y1;
true
delete window.y2;
false

我不清楚为什么。你可以解释吗?

最佳答案

全局对象上的

var 是不可配置的,这意味着它们不能被删除:

var y2 = 'foo';
console.log(
Object.getOwnPropertyDescriptor(window, 'y2')
);

行为符合预期。作为MDN说:

Any property declared with var cannot be deleted from the global scope or from a function's scope.

另一方面,将属性显式分配给对象导致该属性在默认情况下是可配置的:

window.y2 = 'foo';
console.log(
Object.getOwnPropertyDescriptor(window, 'y2')
);

关于javascript - JS 窗口变量声明和行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50791360/

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