为什么NaN是JavaScript中的全局变量?

Dan*_*ner 4 javascript

我注意到它NaN是作为全局变量(window.NaN)实现的,其值为NaN.
为什么会这样?那岂不是更有意义它是一个保留字,代表的值,如true,falsenull

编辑显然这是在规范,以及undefinedInfinity.WTF JavaScript?!

T.J*_*der 8

它不是以这种方式实现的,它是这样指定的:

15.1.1全局对象的值属性

15.1.1.1 NaN

的值NaN就是NaN(见8.5).此属性具有属性{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}.

15.1.1.2 Infinity

值为Infinity+∞(见8.5).此属性具有属性{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}.

15.1.1.3 undefined

的值undefined就是undefined(见8.1).此属性具有属性{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}.

(全局对象是浏览器上的窗口对象.)不执行此操作的实现违反了规范.:-)

至于为什么:规范似乎没有说明原因,所以除非有人能从Brendan Eich那里找到引用他的推理... :-)我只想推测使它们成为全局变量有点不那么限制:你可以拥有Infinity如果您不需要访问全局变量,则代码中的局部变量表示其他变量.如果它是一个保留字,你不能这样做.请注意,它也为麻烦敞开了大门,所以......