var arr = Array.prototype.slice.call( htmlCollection )
будет иметь тот же эффект, используя "нативный" код.
Редактировать
Поскольку это получает много просмотров, обратите внимание (на комментарий @ oriol), что следующее более краткое выражение эффективно эквивалентно:
var arr = [].slice.call(htmlCollection);
Но обратите внимание на комментарий @ JussiR, который, в отличие от «многословной» формы, создает в процессе пустой, неиспользуемый и действительно неиспользуемый экземпляр массива. То, что компиляторы делают с этим, находится за пределами возможностей программиста.
Редактировать
Начиная с ECMAScript 2015 (редакция 6) также существует Array.from :
var arr = Array.from(htmlCollection);
Редактировать
ECMAScript 2015 также предоставляет оператор распространения , который функционально эквивалентен Array.from
(хотя обратите внимание, что Array.from
поддерживает функцию отображения в качестве второго аргумента).
var arr = [...htmlCollection];
Я подтвердил, что оба из вышеперечисленных работают на NodeList
.