This page was translated from English by the community.Learn more and join the MDN Web Docs community.
Объект arguments
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since июль 2015 г..
* Some parts of this feature may have varying levels of support.
Объектarguments — это подобный массиву объект, который содержит аргументы, переданные в функцию.
Примечание:Если вы пишете ES6-совместимый код, то лучше использоватьостаточные параметры.
In this article
Интерактивный пример
function func1(a, b, c) { console.log(arguments[0]); // Expected output: 1 console.log(arguments[1]); // Expected output: 2 console.log(arguments[2]); // Expected output: 3}func1(1, 2, 3);Синтаксис
arguments
Описание
Объектarguments - это локальная переменная, доступная внутри любой (нестрелочной) функции. Объектarguments позволяет ссылаться на аргументы функции внутри неё. Он состоит из переданных в функцию аргументов, индексация начинается с 0. Например, если в функцию было передано 3 аргумента, обратиться к ним можно следующим образом:
arguments[0];arguments[1];arguments[2];Аргументам может быть присвоено значение:
arguments[1] = "new value";Объектarguments не являетсяArray. Он похож на массив, но не обладает ни одним из его свойств, кромеlength. Например, у него нет методаpop. Однако, он может быть преобразован в обычный массив:
var args = Array.prototype.slice.call(arguments);var args = [].slice.call(arguments);// ES2015const args = Array.from(arguments);const args = [...arguments];Предупреждение:Использованиеslice на объектеarguments не позволяет сделать оптимизации в некоторых JavaScript движках (например, V8 —подробнее). Если они важны, можно попробовать вместо этого создать новый массив с аналогичной длиной и заполнить его элементами объектаarguments. Альтернативный вариант — использовать конструкторArray как функцию:
var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments);Объектarguments можно использовать при вызове функции с бо́льшим количеством аргументов, чем было предусмотрено в её объявлении. Такой способ удобен для функций, в которые допустимо передавать переменное количество аргументов. Можно воспользоватьсяarguments.length, чтобы определить количество переданных в функцию аргументов, а затем обработать каждый из них с помощью объектаarguments. Чтобы определить количество параметров функции, описанных в еёсигнатуре, можно использовать свойствоFunction.length.
Использованиеtypeof с объектомarguments
Применение оператораtypeof кarguments вернёт 'object'.
console.log(typeof arguments); // 'object'
Определение типов аргументов может быть выполнено применением оператораtypeof и индексацией.
// выведет тип первого аргументаconsole.log(typeof arguments[0]);
Использование оператора расширения для объектаarguments
Как и с обычными массива-подобными объектами, для преобразования объектаarguments в обычный массив можно использовать методArray.from() илиоператор расширения:
var args = Array.from(arguments);var args = [...arguments];Свойства
arguments.calleeСсылка на функцию, которая выполняется в текущий момент.
arguments.callerСсылка на функцию, которая вызвала функцию, выполняющуюся в текущий момент.
arguments.lengthКоличество переданных в функцию аргументов.
arguments[@@iterator]Возвращает новый объект
Array Iterator, содержащий значения для каждого индекса в массиве.
Примеры
>Создание функции, соединяющей несколько строк
Данный пример описывает функцию, которая соединяет несколько строк. Для этой функции объявлен только один аргумент, определяющий символ-разделитель соединяемых элементов. Функция определена следующим образом:
function myConcat(separator) { var args = Array.prototype.slice.call(arguments, 1); return args.join(separator);}Вы можете передать любое количество аргументов в эту функцию. Она создаёт строку, используя каждый аргумент:
// возвращает "red, orange, blue"myConcat(", ", "red", "orange", "blue");// получает "elephant; giraffe; lion; cheetah"myConcat("; ", "elephant", "giraffe", "lion", "cheetah");// выводит "sage. basil. oregano. pepper. parsley"myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");Функция, создающая HTML списки
В данном примере приведена функция, которая создаёт строку с HTML-разметкой для списка. Единственный её аргумент — строка, определяющая вид списка: если его значение равно "u", формируется неупорядоченный (маркированный) список, а если "o" — то упорядоченный (нумерованный):
function list(type) { var result = "<" + type + "l><li>"; var args = Array.prototype.slice.call(arguments, 1); result += args.join("</li><li>"); result += "</li></" + type + "l>"; // конец списка return result;}Вы можете использовать любое количество аргументов, а функция добавит каждый элемент в список заданного первым аргументом типа. Например:
var listHTML = list("u", "One", "Two", "Three");/* listHTML:"<ul><li>One</li><li>Two</li><li>Three</li></ul>"*/Остаточные, деструктурированные и параметры по умолчанию
Объектarguments может использоваться совместно состаточными параметрами,параметрами по умолчанию илидеструктурированными параметрами.
function foo(...args) { return arguments;}foo(1, 2, 3); // { "0": 1, "1": 2, "2": 3 }Тем не менее, в нестрогих функцияхсоответствие между их аргументами и объектомarguments существует только в том случае, если функцияне содержит никакихостаточных параметров,параметров по умолчанию илидеструктурированных параметров. Например, в функции, приведённой ниже, используется параметр по умолчанию, и в данном случае возвращаемый результат будет равен 10, а не 100:
function bar(a = 1) { arguments[0] = 100; return a;}bar(10); // 10В следующем примере возвращается 100, поскольку здесь нетостаточных параметров,параметров по умолчанию илидеструктурированных параметров:
function zoo(a) { arguments[0] = 100; return a;}zoo(10); // 100На самом деле, еслиостаточные параметры,параметры по умолчанию илидеструктурированные параметры не используются, формальные аргументы будут ссылаться на последние значения объектаarguments, при считывании значений формальных аргументов будут считаны последние данные изarguments, а при изменении значений формальных аргументов будет обновлён и объектarguments. Пример приведён в коде ниже:
function func(a, b) { arguments[0] = 90; arguments[1] = 99; console.log(a + " " + b);}func(1, 2); //90, 99или
function func(a, b) { a = 9; b = 99; console.log(arguments[0] + " " + arguments[1]);}func(3, 4); //9, 99Но в случае, когда применяютсяостаточные параметры,параметры по умолчанию илидеструктурированные параметры, будет обработано нормальное поведение, как в случаепараметров по умолчанию:
function func(a, b, c = 9) { arguments[0] = 99; arguments[1] = 98; console.log(a + " " + b);}func(3, 4); //3, 4Спецификации
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-arguments-exotic-objects> |