Movatterモバイル変換


[0]ホーム

URL:


  1. Веб-технологии для разработчиков
  2. JavaScript
  3. Справочник по JavaScript
  4. Функции
  5. Объект arguments

This page was translated from English by the community.Learn more and join the MDN Web Docs community.

View in EnglishAlways switch to English

Объект 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-совместимый код, то лучше использоватьостаточные параметры.

Примечание:"Подобный массиву" означает, чтоarguments имеет свойствоlength, а элементы индексируются начиная с нуля. Но при этом он не может обращаться к встроенным методамArray, таким какforEach() илиmap(). Подробнее об этом в§Описании.

Интерактивный пример

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 аргумента, обратиться к ним можно следующим образом:

js
arguments[0];arguments[1];arguments[2];

Аргументам может быть присвоено значение:

js
arguments[1] = "new value";

Объектarguments не являетсяArray. Он похож на массив, но не обладает ни одним из его свойств, кромеlength. Например, у него нет методаpop. Однако, он может быть преобразован в обычный массив:

js
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 как функцию:

js
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() илиоператор расширения:

js
var args = Array.from(arguments);var args = [...arguments];

Свойства

arguments.callee

Ссылка на функцию, которая выполняется в текущий момент.

arguments.caller

Ссылка на функцию, которая вызвала функцию, выполняющуюся в текущий момент.

arguments.length

Количество переданных в функцию аргументов.

arguments[@@iterator]

Возвращает новый объектArray Iterator, содержащий значения для каждого индекса в массиве.

Примеры

Создание функции, соединяющей несколько строк

Данный пример описывает функцию, которая соединяет несколько строк. Для этой функции объявлен только один аргумент, определяющий символ-разделитель соединяемых элементов. Функция определена следующим образом:

js
function myConcat(separator) {  var args = Array.prototype.slice.call(arguments, 1);  return args.join(separator);}

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

js
// возвращает "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" — то упорядоченный (нумерованный):

js
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;}

Вы можете использовать любое количество аргументов, а функция добавит каждый элемент в список заданного первым аргументом типа. Например:

js
var listHTML = list("u", "One", "Two", "Three");/* listHTML:"<ul><li>One</li><li>Two</li><li>Three</li></ul>"*/

Остаточные, деструктурированные и параметры по умолчанию

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

js
function foo(...args) {  return arguments;}foo(1, 2, 3); // { "0": 1, "1": 2, "2": 3 }

Тем не менее, в нестрогих функцияхсоответствие между их аргументами и объектомarguments существует только в том случае, если функцияне содержит никакихостаточных параметров,параметров по умолчанию илидеструктурированных параметров. Например, в функции, приведённой ниже, используется параметр по умолчанию, и в данном случае возвращаемый результат будет равен 10, а не 100:

js
function bar(a = 1) {  arguments[0] = 100;  return a;}bar(10); // 10

В следующем примере возвращается 100, поскольку здесь нетостаточных параметров,параметров по умолчанию илидеструктурированных параметров:

js
function zoo(a) {  arguments[0] = 100;  return a;}zoo(10); // 100

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

js
function func(a, b) {  arguments[0] = 90;  arguments[1] = 99;  console.log(a + " " + b);}func(1, 2); //90, 99

или

js
function func(a, b) {  a = 9;  b = 99;  console.log(arguments[0] + " " + arguments[1]);}func(3, 4); //9, 99

Но в случае, когда применяютсяостаточные параметры,параметры по умолчанию илидеструктурированные параметры, будет обработано нормальное поведение, как в случаепараметров по умолчанию:

js
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

Совместимость с браузерами

Смотрите также

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp