Zuvor beantwortete Fragen hier sagten, dass dies der schnellste Weg war:
//nl is a NodeList
var arr = Array.prototype.slice.call(nl);
Beim Benchmarking in meinem Browser habe ich festgestellt, dass es mehr als dreimal langsamer ist als dieses:
var arr = [];
for(var i = 0, n; n = nl[i]; ++i) arr.push(n);
Beide produzieren die gleiche Ausgabe, aber ich kann kaum glauben, dass meine zweite Version der schnellstmögliche Weg ist, zumal die Leute hier etwas anderes gesagt haben.
Ist das eine Eigenart in meinem Browser (Chromium 6)? Oder gibt es einen schnelleren Weg?
EDIT: Für alle, die sich interessieren, habe ich mich für Folgendes entschieden (das in jedem von mir getesteten Browser am schnellsten zu sein scheint):
//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: Ich habe einen noch schnelleren Weg gefunden
// 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];
kann schneller sein alsarr.push(nl[i]);
da es einen Funktionsaufruf vermeidet.