我不知道的undefined

1,246 阅读1分钟

首先undefined表示未定义,以前以为关键字,没想到其实是个全局变量

证明:

undefined in window
结果是true

既然是全局变量是不是可以随便赋值呢

undefined=12

结果是赋值不了的!

接着查看undefined的属性描述

Object.getOwnPropertyDescriptor(window,'undefined')
结果是
//{  
 "writable":false,//当且仅当属性的值可以被改变时为true
  "enumerable":false,//当且仅当指定对象的属性可以被枚举出时,为 true"configurable":false, //当且仅当指定对象的属性描述可以被改变或者属性可被删除时,为true"value":undefined 
}

属性描述是不能赋值的

根据MDN

如果属性已经存在,Object.defineProperty()将尝试根据描述符中的值以及对象当前的配置来修改这个属性。如果旧描述符将其configurable 属性设置为false,则该属性被认为是“不可配置的”,并且没有属性可以被改变(除了单向改变 writable 为 false)。当属性不可配置时,不能在数据和访问器属性类型之间切换。

当试图改变不可配置属性(除了valuewritable 属性之外)的值时会抛出TypeError,除非当前值和新值相同。

接着我们修改一下属性描述

Object.defineProperty(window, "undefined", {  enumerable: true,
  configurable: true,
  writable: true,
  value: undefined
});

 Uncaught TypeError: Cannot redefine property: undefined at Function.defineProperty (<anonymous>) at <anonymous>:

确实是不能修改的

有些地方要求用 void 0来获取undefined的值,我觉的反正不能改变值,其实无所谓!

知道原因,写代码是不是更有信心!