2013-04-22 72 views
9

看来,未定义是/窗口的性质全球:未定义窗口/全局属性?

enter image description here

我一直认为未定义是,像,在JavaScript中潮头值。

但上面的代码(在Chrome中测试)让我感到困惑。

一些可以解释为什么

undefined in window 

evalute为真,而

null in window 

值为false

+0

相关:/ questions/776950/javascript-undefined-undefined – 2013-04-22 07:44:59

回答

12

不仅undefined,也InfinityNaNglobal object的值,在这种情况下,window(截止ES5.1 specification)。

您无法将值指定给undefined的原因是,该属性的定义是writableattribute设置为false

nullprimitive value(如5)的typeNull(如Number5),而不是window的性质。

看看annotated ES5 specification了解更多背景,它的可读性很强!

+2

实际上,在ES5之前,你可以指定'undefined'。你不应该,但你可以。事实上,jQuery中的代码试图获得真正的未定义的情况,以防将任何人分配给未定义的东西。 – slebetman 2013-04-22 08:34:58

+1

有一个内置的'undefined'值,'恰好'用作'window.undefined'属性的值(它被指定为'undefined',但在某些实现中它可以被重新分配)。非常可靠的方法来获得未定义的值包括'void 0','(function(){}())'和'var undef;'。我推荐'var undef = void 0;'在模块模式范围内使用。 – Keen 2013-04-22 16:47:39