做window.undefined = window.undefined有什么意义

时间:2013-12-17 19:54:24

标签: javascript jquery

我正在查看jQuery代码的过去版本,似乎在每个版本they have this line of code里面的某个地方:

window.undefined = window.undefined;

我无法理解为什么这很重要,更重要的是,这是做什么的。这似乎是将undefined分配给undefined,这对我来说毫无意义。

然而,这似乎很重要,我很好奇。

2 个答案:

答案 0 :(得分:10)

window.undefined并不总是存在,因此if (foo === undefined)之类的代码会在旧浏览器中抛出ReferenceError,因为undefined未定义(即未声明)。此代码只是确保undefined已定义(未定义)。

但是,这有点不必要,因为有很多方法可以获得没有同名全局属性的值undefined。例如,您可以编写if (foo === void 0)或类似if (foo === [][0])的内容。

Later versions似乎假设所有支持的浏览器都存在window.undefinedmost recent versions使用这样的模式:

(function( window, undefined ) {
    ...
})( window );

请注意,undefined没有传递任何值,因此保证将其声明为局部变量,并且值为undefined

答案 1 :(得分:1)

使用它,jQuery定义了一个具有真实undefined值的全局变量。拥有像myvar这样的全局变量意味着你在window范围内有这个变量(如window.mywar),如果你在窗口范围内运行这个代码:

var myvar = "whatever";

javascript定义了您的变量,就像您运行了这个:

window.myvar = "whatever";

假设我们没有像myundefined那样的全局变量,这意味着window.myundefined不存在且window.myundefined没有值,这意味着window.myundefined真的是{{} 1}},然后您可以在窗口范围中创建一个名为undefined的全局变量,如下所示:

undefined

并且此行与您上面提到的jQuery代码具有完全相同的结果。换句话说,jQuery可以使用此代码完成相同的操作:

window.undefined = window.myundefined

window.undefined = window.myundefined

这些都定义了一个没有值的全局变量。