undefined是window/global的属性吗?

11

看起来 undefined 是 window/global 的一个属性:

enter image description here

我一直认为在JavaScript中 undefinednull 一样是一个独特的值。

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

有人能解释一下为什么吗?

undefined in window
评估为真,而
null in window

评估为false


relevant: /questions/776950/javascript-undefined-undefined - John Dvorak
1个回答

13

不仅 undefined,还有 InfinityNaN 都是 全局对象 的值,在这种情况下,它是 window(根据 ES5.1 规范)。

你不能给 undefined 赋值的原因是该属性被定义为具有 writable attribute,该属性设置为 false

null是一种原始值(就像5一样),属于类型Null(就像5属于Number类型),而不是window的属性。

查看注释的ES5规范以获取更多背景信息,它非常易读!


2
实际上,在ES5之前,你可以赋值给 undefined。虽然你不应该这样做,但是你确实可以这样做。事实上,jQuery中有一些代码会尝试获取真正的未定义值,以防止其他人将其赋值为其他内容。 - slebetman
1
有一个内置的 undefined 值,它“恰好”被用作 window.undefined 属性的值(它被指定为 undefined,但在某些实现中可以被重新分配)。获取 undefined 值的非常可靠的方法包括 void 0(function () {}())var undef;。我建议在模块模式作用域内使用 var undef = void 0; - Keen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接