为什么可以';我是否删除用var声明的javascript值?

为什么可以';我是否删除用var声明的javascript值?,javascript,Javascript,例如: x = "Hello"; delete x; // returns true, x is removed var y = "Hello"; delete y; // returns false, y is not removed 我对这是如何发生的不感兴趣,我想知道为什么语言有这个特性。严格地说,第一个x不是一个变量,而是全局对象的一个属性。在浏览器中,它通常是window(因此x=“Hello”等于window.x=“Hello”)。您不能使用delete删除变量,但可以使用它删除

例如:

x = "Hello";
delete x; // returns true, x is removed

var y = "Hello";
delete y; // returns false, y is not removed

我对这是如何发生的不感兴趣,我想知道为什么语言有这个特性。

严格地说,第一个
x
不是一个变量,而是全局对象的一个属性。在浏览器中,它通常是
window
(因此
x=“Hello”
等于
window.x=“Hello”
)。您不能使用
delete
删除变量,但可以使用它删除对象属性,这就是它在第一种情况下所做的。

有一个详细的解释,解释了原因

简而言之,delete用于属性,而不是变量。var y创建一个变量。x=“something”创建全局范围的属性


还请注意,并非所有浏览器都处理相同的删除操作。所以我可以把它看作,从对象中删除属性就像从数组中删除元素一样吗?当然可以<代码>删除从对象中删除属性。
var
关键字将变量附加到当前本地上下文,而在声明时不使用
var
将变量隐式附加到全局对象,即
窗口
。然而,当
var
附加到
window
(根上下文)时,
delete
仍然无法工作。很好的链接:)只是好奇,你是怎么找到它的?