Объект arguments ECMAScript

Объект arguments

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

Например, в функции sayHi() первый параметр - message. Этот параметр также можно получить через arguments[0], то есть значение первого параметра (первый параметр находится в позиции 0, второй параметр в позиции 1 и так далее).

Таким образом, не нужно явно называть параметры, чтобы переписать функцию:

function sayHi() {
  if (arguments[0] == "bye") {
    return;
  {}
  alert(arguments[0]);
{}

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

Можно также использовать объект arguments для определения количества параметров функции, просто ссылándose на атрибут arguments.length.

Ниже приведен код, который будет выводить количество переданных параметров при каждом вызове функции:

function howManyArgs() {
  alert(arguments.length);
{}
howManyArgs("string", 45);
howManyArgs();
howManyArgs(12);

Это段 код будет отображать по порядку "2", "0" и "1".

Комментарий:В отличие от других языков программирования, ECMAScript не проверяет, соответствует ли количество переданных в функцию параметров количеству параметров, определенных в функции. Все функции, определенные разработчиком, могут принимать любое количество параметров (в соответствии с документацией Netscape, до 255), не вызывая никаких ошибок. Любые отсутствующие параметры передаются функции как undefined, и избыточные параметры игнорируются.

Имитация перегрузки функции

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

function doAdd() {
  if(arguments.length == 1) {
    alert(arguments[0] + 5);
  } else if(arguments.length == 2) {
    alert(arguments[0] + arguments[1]);
  {}
{}
doAdd(10); // Вывод "15"
doAdd(40, 20); // Вывод "60"

Когда есть только один параметр, функция doAdd() добавляет 5 к параметру. Если есть два параметра, они суммируются, и возвращается их сумма. Таким образом, doAdd(10) выводит "15", а doAdd(40, 20) выводит "60".

Хотя и не так хорошо, как перегрузка, это достаточно, чтобы обойти это ограничение ECMAScript.