var arr = Array.prototype.slice.call( htmlCollection )
terá o mesmo efeito usando o código "nativo".
Editar
Como isso gera muitas visualizações, observe (por comentário de @ oriol) que a seguinte expressão mais concisa é efetivamente equivalente:
var arr = [].slice.call(htmlCollection);
Mas observe pelo comentário do @ JussiR, que, diferentemente da forma "detalhada", ele cria uma instância de matriz vazia, não utilizada e de fato inutilizável no processo. O que os compiladores fazem sobre isso está fora do alcance do programador.
Editar
Desde o ECMAScript 2015 (ES 6), também existe o Array.from :
var arr = Array.from(htmlCollection);
Editar
O ECMAScript 2015 também fornece o operador de spread , que é funcionalmente equivalente a Array.from
(embora observe que Array.from
suporta uma função de mapeamento como o segundo argumento).
var arr = [...htmlCollection];
Confirmei que ambos os trabalhos acima funcionam NodeList
.
Uma comparação de desempenho para os métodos mencionados: http://jsben.ch/h2IFA
for (var a=[], i=collection.length; i;) a[--i] = collection[i];
não muito de um "con" há :-)