void 0 與 undefined 的關係

在練習TypeScript的時候,在對比.ts文件和轉換後的.js文件的時候:

//index.ts
function getInfo(name:string, age:number=10):void {
    console.log(name)
    console.log(age)
}

下面是轉換後的文件:

// index.js
function getInfo(name, age) {
    if (age === void 0) { age = 10; }
    console.log(name);
    console.log(age);
}

這裏有個判斷:

age === void 0

在我的印象中,這裏本來應該是undefined,但是卻變成了void 0.所以我們來看看這兩者之間有什麼聯繫.

爲什麼不直接使用undefined呢.這是因爲undefined雖然在ES5中,是全局對象中一個只讀屬性(read-only),不能被重寫,但是在局部作用域中,卻是可以被重寫的

(function(){
 var undefined = 1
 console.log(undefined)  //1
})()

(function(){
 undefined = 1
 console.log(undefined)  //undefined
})()

那麼爲什麼可以用void 0 來代替undefined呢:

在MDN中有這麼一句話:

The void operator evaluates the given expression and then returns undefined

意思就是:void操作符計算給定的表達式,並且返回undefined .所以我們可以這樣理解,void後面隨便跟着什麼都是返回的undefined,又因爲void 0 這個表達式最短,所以一般就用這個代替了.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章