前段时间不记得在哪里看到的说法:Javascript全等于(===)比普通等于(==)效率低,我当时在没有测试的情况下就隐约相信了这样的提法,因为初步想来,要多一个等号字符,要同时比较类型和值,效率低一点不是没有道理的。有了这种想法,就时时顾虑着我之前偏向于使用“强类型”的完全等于比较符是否于我不利。
今天一位同事看我代码时“抱怨”我用的完全等于太多了,并随口问了句“三个等号效率要高一些吗?”兴许说者无心,但是听着有意,在Editplus里随手写了几行测试代码,却发现结果与前文提到的说法完全相反:
var I=400000;
var d1 = new Date();
for (var i=0; i<I; i++){
1==”1″;
}
d1 = new Date()-d1;var d2 = new Date();
for (var i=0; i<I; i++){
1===”1″;
}
d2 = new Date()-d2;document.write(d1+”:”+d2);
测试结果是完全等于(===)效率要高于普通等于(==),我猜想造成这样的结果缘由如下:完全等于不进行类型转换,但是普通等于需要进行类型转换(Javascript是弱类型、但不是无类型)。
注:这里使用了两个类型不同的对象/值进行比较,如果换成同类型对象/值进行比较(如:1==1/1===1)则效率相当。
关于使用等于/完全等于的建议:
1. 如果程序对“强”类型不作要求,或者看重代码量(虽然我认为多加几个等号代码也多不到哪里去),则建议使用等于(==);
2. 否则建议使用完全等于(===)。
我过多使用完全等于号即考虑类型匹配性,如果不匹配,快速失败。