关于这个问题是因为前几天突然看到一种牛逼的循环写法, 当时自以为很牛逼
var alist = document.getElementsByTagName(“a”);
for (var i = 0, item; item = item[i];) { }
当时不知道是吃了药导致还是怎么了的, 异常兴奋, 居然省略去长度, 那效率肯定会更高.
决定去公司后对比下性能
我很二的在公司开始了测试.
第一种
var alist = document.getElementsByTagName(“a”), temp = [];
for (var i = 0;i < alist.length;i++) { temp.push( alist[i]); }
第二种, 一直使用的
var alist = document.getElementsByTagName(“a”), temp = [];
for (var i = 0,len = alist.length, item = alist[i];i < len;i++, item = alist[i]) { temp.push( item); }
然后是第三种我当时看着很牛逼的一种写法
var alist = document.getElementsByTagName(“a”), temp = [];
for (var i = 0, item;item = alist[i++];) { temp.push( item); }
测试环境:
循环 10000次
1200个a标签
第一种方法 2652毫秒 2742毫秒 2703毫秒
第二种方法1754毫秒 1809毫秒 1763毫秒
第三种方法1724毫秒 1805毫秒 1817毫秒
由此可以发现, 第二种与第三种方法之间的基本又没差异.
可以推测对象的转换不需要消耗多少时间.
第三种方法短小精悍,推荐.
写这篇文章的时候,本以为第三种方法会是一种效率极低的方式.
因为看着每次循环时,还需把对象转换.真是奇了怪.