var arr = Array.prototype.slice.call( htmlCollection )
матиме такий же ефект, використовуючи "рідний" код.
Редагувати
Так як це отримує багато думок, примітка (коментар PER @ Oriol) , що наступне більш короткий вираз ефективно еквівалентно:
var arr = [].slice.call(htmlCollection);
Але зауважте в коментарі @ JussiR, що на відміну від "багатослівної" форми, вона створює порожній, невикористаний і справді непридатний екземпляр масиву в процесі. Що компілятори з цього приводу роблять поза межами програми програміста.
Редагувати
З ECMAScript 2015 (ES 6) існує також Array.from :
var arr = Array.from(htmlCollection);
Редагувати
ECMAScript 2015 також надає оператор розповсюдження , який функціонально еквівалентний Array.from
(хоча зауважте, що Array.from
підтримує функцію відображення як другий аргумент).
var arr = [...htmlCollection];
Я підтвердив, що і вище, і вище NodeList
.
Порівняння продуктивності для згаданих методів: http://jsben.ch/h2IFA
for (var a=[], i=collection.length; i;) a[--i] = collection[i];
так що не так багато "кон" там :-)