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 協議》,轉載必須註明作者和本文連結