最近在查看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)。












网友评论