JavaScript объект arguments

JavaScript Function

Определение и применение

JavaScript объект подобный массиву arguments содержит аргументы, переданные в функцию.

Объект arguments является локальной переменной, которая доступна во всех функциях, за исключением стрелочных, она позволяет ссылаться внутри функции на аргументы функции с помощью объекта arguments. Этот объект содержит запись для каждого аргумента, переданного в функцию, индекс первой записи начинается с 0 и соответствует первому аргументу функции, индекс 1 соответствует второму аргументу функции и так далее.

Например:

function f( a, b, c) {
	arguments[0]; // соответствует первому аргументу функции
	arguments[1]; // соответствует второму аргументу функции
	arguments[2]; // соответствует третьему аргументу функции
}

Обращаю Ваше внимание, что аргументы с помощью объекта arguments доступны также для записи:

function f( a) {
	arguments[0] == 100; // задаем значение первого аргумента функции
}

Как мы уже рассмотрели выше объект arguments не является массивом, по этой причине он не имеет методов и свойств объекта Array, за исключением свойства length. Чтобы преобразовать объект arguments в массив вы можете воспользоваться спред (spread) оператором, или методом from()ECMAScript 2015, который преобразует и возвращает новый массив из массивоподобного, или итерируемого объекта:

// создаем функцию, которая выводит в консоль массив, содержащий переданные аргументы этой функции
function f( a, b, c) {
	const args = [...arguments]; // используем спред оператор
	const args2 = Array.from( arguments ); // используем метод from
	console.log( args, args2 ); // выводим в консоль значение переменных
}

f( 10,20,30 ); // возвращаемое значение [10, 20, 30] [10, 20, 30]

Объект arguments может быть полезен для тех случаев, когда в функцию передается большее количество аргументов, чем было объявлено и в заисимости от этих условий функция выполняет необходимые действия. Рассмотрим простой пример:

function f( a, b) {
	// проверяем количество переданных аргументов
	arguments.length == 2 ? console.log( "да" ) : console.log( "нет"); 
}

f( 10,20 ); // да
f( 10,20,30 ); // нет

Вы можете определить тип передаваемых аргументов следующим образом:

function f( a, b) {
	console.log( typeof arguments );      // выводим в консоль тип объекта arguments
	console.log( typeof arguments[0] ); // выводим в консоль тип первого аргумента
	console.log( typeof arguments[1] ); // выводим в консоль тип второго аргумента
}

f( [1,2,3], 5 ); 
object
object
number


f( {}, "str"); 
object
object
string


f( ()=>0, 5 ); 
object
function
number

Поддержка браузерами

МетодChrome
Chrome
Firefox
Firefox
Opera
Opera
Safari
Safari
Internet Explorer
IExplorer
Microsoft Edge
Edge
argumentsДаДаДаДаДаДа
arguments.calleeДаДаДаДаДаДа
arguments.lengthДаДаДаДаДаДа
arguments[@@iterator]52.046.0Да9.0НетДа

JavaScript синтаксис:

arguments

например:
arguments[0] // первый аргумент функции
arguments[1] // второй аргумент функции
arguments[2] // третий аргумент функции

Версия JavaScript

1.1 (ECMAScript 1st Edition)

Свойства объекта

СвойствоОписание
calleeСвойство ссылается на выполняемую в данный момент функцию. Пятое издание ECMAScript (ES5) запрещает его использование в строгом режиме (strict mode).
lengthСвойство содержит количество аргументов, переданных функции. Это значение может быть больше или меньше, чем количество определенное при создании функции.
[@@iterator]Начальным значением свойства @@iterator является тот же объект функции, что и начальное значение свойства values объекта Array (метод возвращает новый объект итератора массива, содержащий значения для каждого индекса в массиве).

Пример использования

Вычисление факториала с использованием свойства callee объекта arguments:

var factorial = function( num ) {
    if (num <= 1) return 1;
    return num * arguments.callee(num-1 );
};

factorial(0); // возвращаемое значение 1
factorial(3); // возвращаемое значение 6
factorial(5); // возвращаемое значение 120
factorial(10); // возвращаемое значение 3628800

Обратите внимание, что в строгом режиме (strict mode), использование свойства callee запрещено.

В следующем примере расссмотрено как с помощью цикла for..of итерироваться по объекту arguments:

function f() {
    console.log( arguments.length ); // выводим в консоль количество переданных аргументов функции
    for ( let char of arguments ) {
      console.log( char ); // выводим в консоль каждый переданный аргумент
    }
}

f("a", "b", "c"); 
3
a
b
c
JavaScript Function