# void 0与undefined的关系
在练习TypeScript的时候,在对比.ts文件和转换后的.js文件的时候:
//index.ts
function getInfo(name:string, age:number=10):void {
console.log(name)
console.log(age)
}
1
2
3
4
5
2
3
4
5
下面是转换后的文件:
// index.js
function getInfo(name, age) {
if (age === void 0) { age = 10; }
console.log(name);
console.log(age);
}
1
2
3
4
5
6
2
3
4
5
6
这里有个判断:
age === void 0
1
在我的印象中,这里本来应该是undefined,
但是却变成了void 0
.所以我们来看看这两者之间有什么联系.
为什么不直接使用undefined呢.这是因为undefined虽然在ES5中,是全局对象中一个只读属性(read-only),不能被重写,但是在局部作用域中,却是可以被重写的
(function(){
var undefined = 1 //局部变量
console.log(undefined) //1
})()
(function(){
undefined = 1 //全局属性
console.log(undefined) //undefined
})()
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
那么为什么可以用void 0 来代替undefined呢: 在MDN中有这么一句话:戳我 (opens new window)
The void operator evaluates the given expression and then returns undefined
意思就是:void操作符计算给定的表达式,并且返回undefined.
所以我们可以这样理解,void后面随便跟着什么都是返回的undefined,又因为void 0
这个表达式最短,所以一般就用这个代替了.