TL; DR;
Array.prototype.slice.call(nodelist).filter
Метод slice () возвращает массив. Этот возвращаемый массив представляет собой неглубокую копию коллекции (NodeList),
поэтому он работает быстрее, чем Array.from (),
поэтому он работает так же быстро, как Array.from ()
Элементы исходной коллекции копируются в возвращаемый массив следующим образом:
- Для ссылок на объекты (а не на фактический объект) срез копирует ссылки на объекты в новый массив. И исходный, и новый массивы ссылаются на один и тот же объект. Если объект, на который имеется ссылка, изменяется, изменения видны как для нового, так и для исходного массивов.
- Для строк, чисел и логических значений (не объектов String, Number и Boolean) срез копирует значения в новый массив. Изменения строки, числа или логического значения в одном массиве не влияют на другой массив.
Краткое объяснение аргументов
Array.prototype.slice (beginIndex, endIndex)
- принимает необязательные аргументы beginIndex и endIndex. Если они не предоставлены, срезы используют beginIndex == 0, таким образом, он извлекает все элементы из коллекции.
Array.prototype.slice.call (пространство имен, beginIndex, endIndex)
- принимает объект в качестве первого аргумента. Если мы используем коллекцию как объект, это буквально означает, что мы вызываем метод slice непосредственно из этого пространства имен объекта. Slice ()
babel
, тогда[...coll]
просто вызоветArray.from(coll)
все, что не являетсяArray
.