почему 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).