先前在这里回答的问题说这是最快的方法:
//nl is a NodeList var arr = Array.prototype.slice.call(nl); 在我的浏览器上进行基准测试时,我发现它的速度比此速度慢3倍以上:
var arr = []; for(var i = 0, n; n = nl[i]; ++i) arr.push(n); 它们都产生相同的输出,但是我很难相信我的第二个版本是最快的方法,特别是因为人们在这里另有说明。
这是我的浏览器(Chromium 6)中的一个怪胎吗?还是有更快的方法?
编辑:对于任何关心的人,我都选择了以下内容(这似乎是我测试过的每个浏览器中最快的):
//nl is a NodeList var l = []; // Will hold the array of Node's for(var i = 0, ll = nl.length; i != ll; l.push(nl[i++])); EDIT2:我发现了更快的方法
// nl is the nodelist var arr = []; for(var i = nl.length; i--; arr.unshift(nl[i]));
第二个在某些浏览器中往往会更快,但要点是您必须使用它,因为第一个不是跨浏览器。即使他们时代变迁
@kangax( IE 9预览)
Array.prototype.slice现在可以将某些主机对象(例如,NodeList的)转换为数组-大多数现代浏览器已经能够执行此操作很长时间了。
例:
Array.prototype.slice.call(document.childNodes); 问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。