2011-01-28 2 views
10

Недавно взглянув на много кода NodeJS и Javascript, кажется, что аргументы не являются экземпляром Array, но все еще ведут себя как один, поэтому люди делают такие вещи, как Array.prototype.slice.call(arguments, ...) или [].slice.call(arguments), что добавляет многословия и увеличивает препятствия для новичков, чтобы понять и т. Д. есть причина, почему аргументы не являются экземпляром массива или это только одна из тех плохих частей?Почему функция Javascript `arguments` не является экземпляром массива в node.js?

ответ

28

NO. arguments - это отдельный объект, который просто имеет свойство length и имеет возможность использовать [] для его индексации. Но в остальном это просто объект, а не объект Array.

И да, это действительно одна из плохих частей JavaScript.

+0

Спасибо за разъяснение, я знаю, что у него есть дополнительные свойства, такие как .callee и т. Д., Но в идеальном мире не должны указывать прототип на массив. поэтому он будет иметь сращивание/срез прямо на нем. Я прошу не снимать разработчика JS, но только для того, чтобы прояснить мое понимание, в идеале кто-то повернется и скажет, что моя идея затормозилась из-за x/y/z (фундаментальное недоразумение и т. Д.) –

+0

@mattcodes Да, они определенно должны были сделать что. У JS есть куча причуд, и это один из них. –

+2

Также не назначайте 'arguments [0]' и т. Д. Как 'arguments [0]' is * то же самое *, что и ваш первый формальный параметр, изменяющий либо, также изменит другой. –

Смежные вопросы