Нещодавно ми обговорили, як можна задати для функції значення аргументів за замовчуванням. Це дає нам деяку гнучкість в роботі з аргументами. Але що, якщо нам знадобиться функція, приймаюча будь-яку кількість аргументів? Скажімо, нам потрібна функція, що повертає суму всіх переданих аргументів. Як же можна вирішити цю задачу?
Незважаючи на те, що цей об'єкт не є масивом, він поводиться як масив. Arguments містить кожен аргумент, переданий в функцію.
Тепер, коли ми знайомі з об'єктом arguments. ми можемо легко реалізувати потрібну функцію, яка буде працювати з будь-якою кількістю переданих аргументів:
Одна важлива проблема, що виникає при роботі з arguments - цей об'єкт не є справжнім масивом. Ми можемо переконатися в цьому, виконавши наступний код:
Отже, це не масив. Чи є якась різниця в використанні?
На жаль, різниця є. Arguments не підтримує стандартні методи масиву на кшталт push. pop. slice. indexOf або sort.
Це може перешкодити вам, особливо якщо ви передасте arguments в будь-яку функцію, яка очікує масив.
Вирішення цієї проблеми легкоё для використання, але трохи складне для розуміння.
Розберемо цей код:
- Ми створюємо порожній масив.
- Використовуємо метод масиву slice.
- Використовуємо метод call, щоб змусити slice обробляти об'єкт arguments, а не порожній масив.
Виклик методу slice без вказівки індексу, з якого йому слід починати обробку, поверне нам вихідний масив. І це те, що нам потрібно: ми отримали масив, що містить всі аргументи, передані в функцію.