var arr = Array.prototype.slice.call( htmlCollection )
tendrá el mismo efecto usando el código "nativo".
Editar
Dado que esto obtiene muchas vistas, tenga en cuenta (según el comentario de @ oriol) que la siguiente expresión más concisa es efectivamente equivalente:
var arr = [].slice.call(htmlCollection);
Pero tenga en cuenta según el comentario de @ JussiR, que a diferencia de la forma "detallada", crea una instancia de matriz vacía, no utilizada y, de hecho, inutilizable en el proceso. Lo que los compiladores hacen al respecto está fuera del conocimiento del programador.
Editar
Desde ECMAScript 2015 (ES 6) también existe Array.from :
var arr = Array.from(htmlCollection);
Editar
ECMAScript 2015 también proporciona el operador de propagación , que es funcionalmente equivalente a Array.from
(aunque tenga en cuenta que Array.from
admite una función de mapeo como segundo argumento).
var arr = [...htmlCollection];
He confirmado que ambos de los anteriores funcionan NodeList
.
Una comparación de rendimiento para los métodos mencionados: http://jsben.ch/h2IFA
for (var a=[], i=collection.length; i;) a[--i] = collection[i];
así que no hay mucha "estafa" allí :-)