首先undefined表示未定义,以前以为关键字,没想到其实是个全局变量
证明:
undefined in window
结果是true复制代码
既然是全局变量是不是可以随便赋值呢
undefined=12复制代码
结果是赋值不了的!
接着查看undefined的属性描述
Object.getOwnPropertyDescriptor(window,'undefined')
结果是
//{
"writable":false,//当且仅当属性的值可以被改变时为true
"enumerable":false,//当且仅当指定对象的属性可以被枚举出时,为 true。
"configurable":false, //当且仅当指定对象的属性描述可以被改变或者属性可被删除时,为true。
"value":undefined
}复制代码
属性描述是不能赋值的
如果属性已经存在,Object.defineProperty()
将尝试根据描述符中的值以及对象当前的配置来修改这个属性。如果旧描述符将其configurable
属性设置为false
,则该属性被认为是“不可配置的”,并且没有属性可以被改变(除了单向改变 writable 为 false)。当属性不可配置时,不能在数据和访问器属性类型之间切换。
当试图改变不可配置属性(除了value
和writable
属性之外)的值时会抛出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的值,我觉的反正不能改变值,其实无所谓!
知道原因,写代码是不是更有信心!