最近在查看ts编译源码的时候,注意到一个陌生的void 0
语句,似乎是取代了undefined
。
so,为什么要用void 0
代替undefined
?
-
undefined
不是保留字,它只是全局对象的一个属性,在低版本IE能被重写:
var undefined = 10;
// undefined -- chrome
// 10 -- IE 8
alert(undefined);
好气啊~IE什么事情都能搞出来!是不是不用兼容就可以不考虑了?
-
undefined
在 ES5 中已经是全局对象的一个只读(read-only)属性了,它不能被重写。但是在局部作用域中,还是可以被重写的。
(function() {
var undefined = 10;
alert(undefined);// 10 -- chrome
})();
(function() {
undefined = 10;
alert(undefined);// undefined -- chrome
})();
所以void 0有什么优势呢?
void
运算符能对给定的表达式进行求值,然后返回undefined
。也就是说,void
后面你随便跟上一个表达式,返回的都是undefined
,都能完美代替undefined
!那么,这其中最短的是什么呢?毫无疑问就是void 0
了。其实用void 1
,void (1+1)
,void (0)
或者void "hello"
,void (new Date())
等等,都是一样的效果。更重要的前提是,void
是不能被重写的(cannot be overidden)。
网友评论