javascript 中 undefine于void 0区别

今天看prototype源码时发现有一段代码很奇怪

switch(o) {

      case null: return NULL_TYPE;
      case (void 0): return UNDEFINED_TYPE;

}

为什么第二个case的值是(void 0)?

从这段代码可以看出,它是对null和undefined进行判断。

第二个case的判断条件就是undefined。那么它为什么使用void 0而不是直观的undefined呢?

学习过javascript的同学知道undefined是一个全局属性,表示未定义或定义了没有赋值。

void是一个一元运算符,不管传入什么参数都会返回undefined。

到网上google一下,发现void操作符是在ECMAScript v1中定义的,而undefined是在ECMAScript v5中定义的。

好了,我们知道这个用法是为了兼容老版本的浏览器。那么还有其它的区别吗?

我们知道undefined不是javascript的保留字,所以我们可以用undefined作为变量名。这时,我们定义的undefined就会影响到使用undefined作为判断的地方。

那么,真是这样吗?

我的测试代码是这样的:

undefined=123;
console.log(undefined);
console.log(void 0);

结果在chrome17和firefox10里面打印的结果是2个undefined,但是在ie9里面打印的是123和undefined。

我只能说chrome17和firefox10很智能。

同时,我去测试了一下这两种方式的性能差别。

我的测试代码是这样的:

var j=10000000,res;
var t1=new Date();
for(var i=0;i<j;i++){
res=undefined;
}
var t11=new Date();
console.log(t11.getTime()-t1.getTime());
var t2=new Date();
for(var i=0;i<j;i++){
res=void 0;
}
var t22=new Date();
console.log(t22.getTime()-t2.getTime());

发现它们性能没多大区别。但是我却发现chrome17的时间在140ms左右,firefox10在28ms,ie9在440ms。chrome和firefox的结果让我诧异。


最后,总结一下:

使用void 0代替undefined是为了兼容性以及预防代码的不规范(自己修改undefined的值)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值