JS 里使用的 undefined 是个变量

1,564 阅读1分钟

学习 JS,都知道语言里包含一个 Undefined 类型,该类型中只包含一个值 undefined。 我们可能写过这样的代码:

let sometThing = undefined

这里的“undefined”其实是个变量,何以见得?下图为证:

image.png
因为历史原因,ECMAScript 标准并没有把 undefined 列为保留字。也就是,我们平常里使用的 undefined 其实是全局对象 window 上的一个属性,可以理解成一个变量。只不过这个变量的值是 undefined,通过获取它的属性描述符,知道它是不可写入的。

image.png

但也不能完全避免问题的出现:

image.png

上图里,在 foo 函数内部,我们定义了一个变量 undefined,之后再访问 undefined 得到的就不是 undefined 值,而是字符串 "Oops" 了。

那如何避免这个问题呢?可以使用 void 运算符,根据定义,它总是返回 undefined 值。

void 0 // undefined

(完)