Wcześniej odpowiedzi na pytania tutaj powiedział, że był to najszybszy sposób:
//nl is a NodeList
var arr = Array.prototype.slice.call(nl);
Podczas testów porównawczych w mojej przeglądarce stwierdziłem, że jest on ponad 3 razy wolniejszy niż to:
var arr = [];
for(var i = 0, n; n = nl[i]; ++i) arr.push(n);
Oba generują tę samą moc wyjściową, ale trudno mi uwierzyć, że moja druga wersja jest najszybszym możliwym sposobem, zwłaszcza że ludzie mówią tutaj inaczej.
Czy to dziwactwo w mojej przeglądarce (Chromium 6)? Czy jest szybszy sposób?
EDYCJA: Dla każdego, kogo to obchodzi, zdecydowałem się na następujące (co wydaje się najszybsze w każdej testowanej przeglądarce):
//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: Znalazłem jeszcze szybszy sposób
// 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];
może być szybszy niż,arr.push(nl[i]);
ponieważ pozwala uniknąć wywołania funkcji.