Недавно взглянув на много кода NodeJS и Javascript, кажется, что аргументы не являются экземпляром Array, но все еще ведут себя как один, поэтому люди делают такие вещи, как Array.prototype.slice.call(arguments, ...)
или [].slice.call(arguments)
, что добавляет многословия и увеличивает препятствия для новичков, чтобы понять и т. Д. есть причина, почему аргументы не являются экземпляром массива или это только одна из тех плохих частей?Почему функция Javascript `arguments` не является экземпляром массива в node.js?
10
A
ответ
28
NO. arguments
- это отдельный объект, который просто имеет свойство length
и имеет возможность использовать []
для его индексации. Но в остальном это просто объект, а не объект Array
.
И да, это действительно одна из плохих частей JavaScript.
Смежные вопросы
- 1. Почему Array.prototype не является экземпляром массива?
- 2. Почему аргумент функции не является объектом массива в Javascript?
- 3. неопределенный не является функция-Node.js
- 4. Javascript 'arguments' Ключевое слово
- 5. node.js i18n .__ не является функция
- 6. Почему список различий не является экземпляром складного?
- 7. Функция Аргумент объекта в Node.js отличается от JavaScript JavaScript.
- 8. Node.js Q ninvoke multiple arguments
- 9. В JavaScript: если объект является функцией, то как это может быть, если функция является экземпляром объекта
- 10. Почему Node.js является средой, а не платформой?
- 11. Three.js не является экземпляром THREE.Object3D
- 12. Функция javascript не является функцией
- 13. any_instance не является экземпляром-агностиком
- 14. Javascript/Node.js «Имя функции» не является функцией
- 15. Элемент не является экземпляром типа
- 16. «обратный вызов не является функция» Node.js
- 17. Когда «это» не является экземпляром определяющей функции?
- 18. параллельная функция JavaScript, node.js
- 19. Почему класс не является «экземпляром» его родительского класса?
- 20. Почему `arguments` является Array-подобным в JS-функции?
- 21. Почему Free не является экземпляром монады в Scalaz 7.1.5?
- 22. JavaScript readAsDataurl не является функция
- 23. Почему List [Int] является экземпляром List [Boolean]?
- 24. Metaclass deligate не является экземпляром
- 25. javascript: parameterize constructor and arguments
- 26. Является ли Array.from (arguments) приемлемым способом создания массива аргументов?
- 27. Node.js/q почему эта функция не вызвана?
- 28. JavaScript - Файл является экземпляром файла, но `instanceof File` является ложным
- 29. Почему эта функция украшения javascript не работает?
- 30. Почему Socket не является экземпляром Closeable во время выполнения?
Спасибо за разъяснение, я знаю, что у него есть дополнительные свойства, такие как .callee и т. Д., Но в идеальном мире не должны указывать прототип на массив. поэтому он будет иметь сращивание/срез прямо на нем. Я прошу не снимать разработчика JS, но только для того, чтобы прояснить мое понимание, в идеале кто-то повернется и скажет, что моя идея затормозилась из-за x/y/z (фундаментальное недоразумение и т. Д.) –
@mattcodes Да, они определенно должны были сделать что. У JS есть куча причуд, и это один из них. –
Также не назначайте 'arguments [0]' и т. Д. Как 'arguments [0]' is * то же самое *, что и ваш первый формальный параметр, изменяющий либо, также изменит другой. –