在練習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 這個表達式最短,所以一般就用這個代替了.