先前在这里回答的问题说这是最快的方法:
//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);
它们都产生相同的输出,但是我很难相信我的第二个版本是最快的方法,特别是因为人们在这里另有说明。
这是我的浏览器中的一个怪胎(铬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]));
var i = nl.length, arr = new Array(i); for(; i--; arr[i] = nl[i]);
arr[arr.length] = nl[i];
可能比arr.push(nl[i]);
避免调用函数要快。