Раніше відповіді на запитання тут говорили, що це найшвидший спосіб:
//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)? Або є більш швидкий шлях?
EDIT: Для всіх, хто переймається, я зупинився на наступному (який, здається, є найшвидшим у кожному перевіреному браузері):
//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]);
оскільки це дозволяє уникнути виклику функції.