JavaScriptのargmentsオブジェクト


アーグメンントオブジェクト
関数コードでは、特殊なオブジェクトアーグメンントを使用して、開発者がパラメータ名を明確に指摘する必要がなく、それらにアクセスすることができます.
例えば、関数sayHi()において、最初のパラメータはメッセージである.argments[0]でもこの値にアクセスできます.すなわち、最初のパラメータの値(最初のパラメータは位置0にあり、2番目のパラメータは位置1にあり、これに類推します.)
したがって、名前のパラメータを明確にする必要はなく、関数を書き換えることができます.
function sayHi() {
  if (arguments[0] == "bye") {
    return;
  }

  alert(arguments[0]);
}
検出パラメータの個数
また、argmentsオブジェクト検出関数のパラメータ個数を用いて、属性argments.lengthを参照すれば良い.
以下のコードは、各呼び出し関数で使用するパラメータの個数を出力します.
function howManyArgs() {
  alert(arguments.length);
}

howManyArgs("string", 45);
howManyArgs();
howManyArgs(12);
上のコードは順に「2」、「0」、「1」と表示されます.
注記:他のプログラム設計言語と違って、ECMAScriptは関数に伝達されるパラメータの個数が関数定義のパラメータ個数に等しいかどうかを検証しません.開発者が定義した関数は、任意の数のパラメータ(Netscapeのドキュメントによって最大255個まで許容されます)を受け入れることができます.漏れたパラメータはundefinedで関数に伝達されます.余分な関数は無視されます.
アナログ関数の再負荷
関数に伝達するパラメータの個数をargmentsオブジェクトで判断すれば、アナログ関数の再負荷が可能です.
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のこのような制限はもう避けられます.
パラメータを表す配列です.パラメータの数が決まっていない時に使いやすいです.
function heji() {
    var ans = 0;
    for (i = 0; i < heji.arguments.length; i++) {
        ans += heji.arguments[i];
    }
    return(ans);
}
sum = heji(1, 2, 3, 4, 5);