Các câu hỏi được trả lời trước đây ở đây nói rằng đây là cách nhanh nhất:
//nl is a NodeList
var arr = Array.prototype.slice.call(nl);
Khi đo điểm chuẩn trên trình duyệt của tôi, tôi thấy rằng nó chậm hơn 3 lần so với điều này:
var arr = [];
for(var i = 0, n; n = nl[i]; ++i) arr.push(n);
Cả hai đều sản xuất cùng một đầu ra, nhưng tôi thấy khó tin rằng phiên bản thứ hai của tôi là cách nhanh nhất có thể, đặc biệt là vì mọi người đã nói khác ở đây.
Đây có phải là một trò chơi trong trình duyệt của tôi (Chromium 6) không? Hay là có một cách nhanh hơn?
EDIT: Đối với bất kỳ ai quan tâm, tôi đã giải quyết các vấn đề sau (dường như là nhanh nhất trong mọi trình duyệt mà tôi đã thử nghiệm):
//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: Tôi đã tìm thấy một cách thậm chí nhanh hơn
// 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];
có thể nhanh hơnarr.push(nl[i]);
vì nó tránh được một cuộc gọi chức năng.