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(), который преобразует и возвращает новый массив из массивоподобного, или итерируемого объекта:
// создаем функцию, которая выводит в консоль массив, содержащий переданные аргументы этой функции 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 | Firefox | Opera | Safari | IExplorer | Edge |
---|---|---|---|---|---|---|
arguments | Да | Да | Да | Да | Да | Да | arguments.callee | Да | Да | Да | Да | Да | Да | arguments.length | Да | Да | Да | Да | Да | Да | arguments[@@iterator] | 52.0 | 46.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 cJavaScript Function