关于 Undefined
undefined
本质
undefined
是一个原始数据类型,也是一个原始值数据
undefined
是window
对象上的一个属性

undefined
不可写
| |
| |
| |
| window.undefined = 1 |
| console.log(window.undefined) |
undefined
不可配置
| |
| |
| |
| delete window.undefined |
| console.log(window) |
| console.log(window.undefined) |
你会发现window上还是有undefined
这个属性
undefined
不可枚举
| let enumTheUndefinedFlag = false |
| for(let key in window){ |
| if(key===undefined){ |
| enumTheUndefinedFlag = true |
| } |
| } |
| console.log(enumTheUndefinedFlag) |
undefined
属性不可被重新定义
| |
| |
| |
| Object.defineProperties(window,undefined,{ |
| writable:true, |
| enumerable:true, |
| configurable:true |
| }) |
undefined
在全局和局部的使用
首先 undefined
不是javascript
的保留字或者关键字
| var undefined = 1 |
| console.log(undefined) |
上面代码在全局定义了一个undefined变量值为1,但是本质上使用var
在全局定义的变量终究是绑定在window
对象上的

然鹅,Windows.undefined是不可写的,所以值不会变
你用const,let在全局声明undefined
只会报错,因为全局作用域已经存在了undefined
有了上面的知识,应该就能猜到,undefined
在局部作用域应该是可以当作变量名的
| function scoped(){ |
| let undefined = 1 |
| console.log(undefined) |
| return undefined; |
| } |
| console.log(scoped()); |
扩展 void
void(x:any)
都return undefined
console.log(void(0)===undefined)
局部作用域,为什么有些人常用 void(0)
当作undefined
,因为不知道这个作用域会不会有人用undefined
当作变量哈哈哈哈!

| function scoped(){ |
| let a |
| const b = 1 |
| const undefined = 2 |
| if(a===undefined){ |
| console.log("a 尚未定义值!") |
| }else{ |
| console.log("a 定义值了!") |
| } |
| } |
| scoped() |
是不是就有点蛋疼了~,但是你用void(x:any)
就没有问题啦!
| function scoped(){ |
| let a |
| const b = 1 |
| const undefined = 2 |
| if(a===void(0)){ |
| console.log("a 尚未定义值!") |
| }else{ |
| console.log("a 定义值了!") |
| } |
| } |
| scoped() |