почему Array slice преобразует аргументы javascript в array
Почему применение метода slice к javascript arguments значение следующим образом Array.prototype.slice.call(arguments) преобразовать его в массив? Если slice используется на массивах, и arguments не является массивом, тогда как это работает? Это просто особый случай, когда slice применяется к аргументам?
2 ответов
С спецификация EcmaScript на Array.prototype.slice:
Примечание на
sliceфункция намеренно универсальна; она не требует, чтобы ееthisзначение-объект массива. Поэтому его можно перенести к другим видам объектов для пользы как метод. Лиsliceфункция может быть успешно применена к объекту хоста, зависящему от реализации.
и так, slice работает на каждом объекте, который имеет length свойство (например,Arguments объекты). И даже для тех, кто этого не делает, он просто возвращает пустой массив.
правильно, это трюк, который использует тот факт, что аргументы являются перечислимым списком. Он также работает с другими перечислимыми списками (например, nodelists).