Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么window.undefined在旧浏览器中是可变的?_Javascript_Browser - Fatal编程技术网

Javascript 为什么window.undefined在旧浏览器中是可变的?

Javascript 为什么window.undefined在旧浏览器中是可变的?,javascript,browser,Javascript,Browser,编写规范的团队的意图是什么,使未定义的可变,因此不利于比较?我不知道关于这一点的唯一、明确的答案,但下面是一些语言设计关注点,它们提供了部分机制和考虑因素的解释 首先也是最重要的一点:类似于null、true和false的可比较值是可用的。这些是JavaScript语言的基本部分——与if和for的级别类似undefined看起来非常像null,因此从使用角度来看,它们应该是相同的,这是相当直观的。它最终有点不同——在这方面更像是NaN 当问这个问题时,值得一问的是,事实上,多少是可变的。几乎所

编写规范的团队的意图是什么,使
未定义的
可变,因此不利于比较?

我不知道关于这一点的唯一、明确的答案,但下面是一些语言设计关注点,它们提供了部分机制和考虑因素的解释

首先也是最重要的一点:类似于
null
true
false
的可比较值是可用的。这些是JavaScript语言的基本部分——与
if
for
的级别类似
undefined
看起来非常像
null
,因此从使用角度来看,它们应该是相同的,这是相当直观的。它最终有点不同——在这方面更像是
NaN

当问这个问题时,值得一问的是,事实上,多少是可变的。几乎所有的东西——如果你想覆盖任何标准的构造函数或函数,你可能可以<代码>数组
数学
求值
等都可以设置

在原始语言中甚至没有使窗口上的属性不可变的机制。即使设计师认为防止对
未定义的
进行更改是一个好主意,但到目前为止,除了更改其在语言中的语法含义外,还没有其他方法可以这样做

然而,如今,核心语言规范提供了更多关于如何以及为什么可以更改变量的控制。ECMAScript 5以控制属性如何可变的方式添加,并且可以配置变量是否可写。这可以通过函数看到。我相信窗口上唯一可以被视为“核心JavaScript”的不可写值是
未定义的
无限
NaN
(其他值在浏览器中是不可写的,但我相信它们几乎都与浏览器本身有关,并且不是语言的基础)。本规范的第1部分对此进行了详细说明;我在公园里找不到类似的东西

这仍然不能阻止您完全“覆盖未定义的”-如果您不在全局范围内,可以将其视为变量。因此,当在全局范围内执行时,这将只打印
未定义的

var undefined = 5;
console.log(undefined);
但这将打印5-

(function() {
    var undefined = 5;
    console.log(undefined);
})();

这根本不会改变值,它只是创建了一个新的局部引用,指向一个名为“undefined”的变量。由于该值是在顶级作用域(
窗口
)上定义的,因此该语言仅阻止分配给该特定对象上的特定属性。

自动分配给刚声明的变量或没有实际参数的形式参数的原语值。更多信息请访问。。为什么现在重要?有时候事情的发生只是因为它们发生了。JavaScript最初根本没有未定义的
。它有一个
undefined
类型,但没有
窗口。undefined
属性。后来,浏览器添加了
undefined
属性,但很可能没有人认真考虑过它。@MichaelGeary只是好奇而已。所以你是说没有人期望人们改变
窗口。未定义的
?我个人认为这还是比较好的。如果有人想破坏JS,他们会的。还有一百万件我们不能防范的事情,为什么这件事会受到媒体的关注?@AlexanderSuraphel-@Bubbles的回答对此有着深刻的见解,特别是关键的一点:“在原始语言中,甚至没有机制使窗口上的属性不可变。”这并不是说有人认为使用
窗口是一个好主意。未定义的
是可变的,只是当时没有一种方便的方法来使用其他方法。请特别注意,
window.undefined
不是核心JavaScript语言的一部分,只是浏览器供应商在浏览器端添加的东西(与JavaScript语言本身相反)。