TL; DR;
Array.prototype.slice.call(nodelist).filter
O método slice () retorna uma matriz. Essa matriz retornada é uma cópia superficial da coleção (NodeList).
Portanto, funciona mais rápido do que Array.from ().
Portanto, funciona tão rápido quanto Array.from ()
Elementos da coleção original são copiados para a matriz retornada da seguinte maneira:
- Para referências de objeto (e não o objeto real), a fatia copia as referências de objeto para a nova matriz. Tanto a matriz original quanto a nova se referem ao mesmo objeto. Se um objeto referenciado for alterado, as alterações serão visíveis para os arrays novos e originais.
- Para strings, números e booleanos (não String, Number e objetos Boolean), o slice copia os valores para o novo array. Mudanças na string, número ou booleano em um array não afetam o outro array.
Breve explicação sobre os argumentos
Array.prototype.slice (beginIndex, endIndex)
- usa argumentos opcionais beginIndex e endIndex. Se eles não forem fornecidos, as fatias usam beginIndex == 0, portanto, extrai todos os itens da coleção
Array.prototype.slice.call (namespace, beginIndex, endIndex)
- leva um objeto como o primeiro argumento. Se usarmos uma coleção como um objeto, significa literalmente que chamamos o método slice diretamente desse objeto namespace.slice ()
babel
,[...coll]
simplesmente solicitaráArray.from(coll)
qualquer coisa que não seja umArray
.