Skip to content

0x012-Javascript中undefined是能被重写

由于JavaScript语言的设计失误,undefined是一个变量,而不是一个关键字。为了避免无意中被篡改,很多人建议使用 void 0 来获取 undefined 值。

  • 在现代浏览器(JavaScript 1.8.5/Firefox 4+),自 ECMAscript5 标准以来 undefined 是一个不能被配置(non-configurable),不能被重写(non-writable)的属性
  • 局部变量仍然可以修改,例如:
js
// 不要这样做!
(() => {
  const undefined = "foo";
  console.log(undefined, typeof undefined); // foo string
})();

((undefined) => {
  console.log(undefined, typeof undefined); // foo string
})("foo");
// 不要这样做!
(() => {
  const undefined = "foo";
  console.log(undefined, typeof undefined); // foo string
})();

((undefined) => {
  console.log(undefined, typeof undefined); // foo string
})("foo");

参考

undefined - JavaScript | MDN
void 运算符 - JavaScript | MDN