arguments в JavaScript
- Что такое arguments
- Доступ к аргументам
- Свойство length
- arguments - не массив
- arguments и стрелочные функции
- Современная замена
- Итого
arguments - это специальный объект, который доступен внутри обычной функции.
В нем хранятся все аргументы, которые были переданы при вызове функции.
function showArguments() {
console.log(arguments);
}
showArguments('JavaScript', 'React', 'Node.js');
Даже если у функции нет параметров, переданные значения все равно попадут в arguments.
Что такое arguments
arguments помогает получить доступ к аргументам функции без заранее объявленных параметров.
function showFirstArgument() {
console.log(arguments[0]);
}
showFirstArgument('Привет');
Результат:
Привет
Здесь arguments[0] - первый аргумент, который передали функции.
Доступ к аргументам
Объект arguments похож на массив: у каждого аргумента есть индекс.
function showUser(name, age) {
console.log(arguments[0]);
console.log(arguments[1]);
}
showUser('Анна', 25);
Результат:
Анна
25
Индексы начинаются с нуля. Первый аргумент находится в arguments[0], второй - в arguments[1] и так далее.
Свойство length
У arguments есть свойство length. Оно показывает, сколько аргументов передали функции.
function showCount() {
console.log(arguments.length);
}
showCount('HTML', 'CSS', 'JavaScript');
Результат:
3
Это удобно, когда количество аргументов заранее неизвестно.
function sum() {
let result = 0;
for (let i = 0; i < arguments.length; i++) {
result += arguments[i];
}
return result;
}
console.log(sum(2, 4, 6));
console.log(sum(10, 20));
Результат:
12
30
arguments - не массив
arguments похож на массив, но массивом не является.
Например, у него нет привычных методов массивов: map(), filter(), reduce().
function doubleNumbers() {
return arguments.map(function (number) {
return number * 2;
});
}
doubleNumbers(1, 2, 3);
Такой код вызовет ошибку, потому что map() у arguments нет.
Если нужно работать с ним как с массивом, можно сначала преобразовать его.
function doubleNumbers() {
let numbers = Array.from(arguments);
return numbers.map(function (number) {
return number * 2;
});
}
console.log(doubleNumbers(1, 2, 3));
Результат:
[2, 4, 6]
arguments и стрелочные функции
У стрелочных функций нет своего arguments.
const showArguments = () => {
console.log(arguments);
};
showArguments(1, 2, 3);
В таком виде arguments использовать не стоит. Для стрелочных функций лучше явно принимать параметры или использовать rest parameters.
Современная замена
В современном JavaScript вместо arguments чаще используют rest parameters.
function sum(...numbers) {
return numbers.reduce(function (result, number) {
return result + number;
}, 0);
}
console.log(sum(2, 4, 6));
Результат:
12
numbers - это уже настоящий массив. С ним можно сразу использовать методы массивов.
arguments все еще встречается в старом коде, поэтому его важно понимать. Но в новом коде rest parameters обычно читаются проще.
Итого
1. arguments - это специальный объект внутри обычной функции.
2. В нем хранятся все аргументы, переданные при вызове функции.
3. К аргументам можно обращаться по индексам: arguments[0], arguments[1] и так далее.
4. arguments похож на массив, но не является массивом.
5. У стрелочных функций нет своего arguments.
6. В новом коде чаще используют rest parameters.