关于 Undefined
关于 Undefined
#
undefined
本质#
undefined
是一个原始数据类型,也是一个原始值数据
undefined
是 window
对象上的一个属性#
undefined
不可写#
/*
window.undefined 不可写(writable=false)
*/
window.undefined = 1
console.log(window.undefined) //undefined
undefined
不可配置#
/*
undefined`不可配置 configurable=false
*/
delete window.undefined
console.log(window)
console.log(window.undefined)
你会发现 window 上还是有 undefined
这个属性
undefined
不可枚举#
let enumTheUndefinedFlag = false //是否有枚举到undefined
for(let key in window){
if(key===undefined){
enumTheUndefinedFlag = true
}
}
console.log(enumTheUndefinedFlag) //false
undefined
属性不可被重新定义#
/*
❌ERROR: Uncaught TypeError: Cannot convert undefined or null to object at Function.defineProperties
*/
Object.defineProperties(window,undefined,{
writable:true,
enumerable:true,
configurable:true
})
undefined
在全局和局部的使用#
首先
undefined
不是javascript
的保留字或者关键字
var undefined = 1
console.log(undefined) //undefined
上面代码在全局定义了一个 undefined 变量值为 1,但是本质上使用 var
在全局定义的变量终究是绑定在 window
对象上的
然鹅,Windows.undefined 是不可写的,所以值不会变
你用 const,let 在全局声明
undefined
只会报错,因为全局作用域已经存在了undefined
有了上面的知识,应该就能猜到,undefined
在局部作用域应该是可以当作变量名的
function scoped(){
let undefined = 1
console.log(undefined) //1
return undefined;
}
console.log(scoped()); //1
扩展 void
#
void(x:any)
都 return undefined
console.log(void(0)===undefined) //true
局部作用域,为什么有些人常用 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() //a 定义值了!
是不是就有点蛋疼了~, 但是你用 void(x:any)
就没有问题啦!
function scoped(){
let a
const b = 1
const undefined = 2
if(a===void(0)){ //或者用window.undefined也是可以的!
console.log("a 尚未定义值!")
}else{
console.log("a 定义值了!")
}
}
scoped() //a 尚未定义值!
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: