Ранее отвеченные вопросы здесь говорили, что это самый быстрый способ:
//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]));
var i = nl.length, arr = new Array(i); for(; i--; arr[i] = nl[i]);
arr[arr.length] = nl[i];
может быть быстрее, чем,arr.push(nl[i]);
поскольку он избегает вызова функции.