arguments リダイレクト 4

概要

関数へ渡された引数に対応する配列のようなオブジェクト。

すべての関数内でのローカル変数、または Function の非推奨のプロパティ
実装されたバージョン

JavaScript 1.1, NES 2.0

JavaScript 1.2: arguments.callee プロパティを追加。

JavaScript 1.3: arguments.caller プロパティを非推奨とする。arguments オブジェクトのプロパティとしての引数名およびローカル変数名のサポートを削除。

JavaScript 1.4: Function のプロパティとしての argumentsarguments.callee、および arguments.length を非推奨とする。関数のローカル変数としての arguments、およびこの変数のプロパティとしての arguments.calleearguments.length はそのまま維持。

ECMAScript エディション ECMA-262

説明

arguments はすべての関数内で利用可能なローカル変数です。Function のプロパティとしての arguments はもはや使用されません。

arguments オブジェクトを使うことにより、関数内で関数の引数を参照できます。このオブジェクトは、関数に渡された各引数に対する入力を含みます。最初の入力の添え字は 0 から始まります。たとえば、もし関数に 3 つの引数が渡されたなら、次のようにその引数を参照できます:

arguments[0]
arguments[1]
arguments[2]

引数を設定することもできます:

arguments[1] = 'new value';
注: SpiderMonkey JavaScript エンジンには、もし n が仮引数または実引数の数より大きかったなら、arguments[n] を設定できないというバグがありました。これは JavaScript 1.6 用のエンジンで修正されました。

arguments オブジェクトは配列ではありません。これは配列と似ていますが、length 以外のどんな配列のプロパティも持ちません。たとえば、これは pop メソッドを持ちません。しかしながら、これは本当の配列に変換できます:

var args = Array.prototype.slice.call(arguments);

arguments オブジェクトは関数本体の中でのみ利用可能です。関数宣言の外部で arguments オブジェクトにアクセスを試みると、エラーを引き起こします。

形式的に受け入れるよう宣言されたのよりも多くの引数を用いて関数を呼び出すなら、arguments オブジェクトが使えます。この技法は、可変数の引数を渡されることのある関数に役立ちます。関数に渡された引数の数を測るために arguments.length が使え、それから arguments オブジェクトを使って各引数を処理できます。(関数が定義されたときに宣言された引数の数を測るためには、Function.length プロパティを使ってください。)

プロパティ

arguments.callee
現在実行している関数の関数本体を示す。
arguments.caller
現在実行している関数を呼び出した関数の名前を示す。
arguments.length
関数に渡された引数の数を示す。

後方互換性

JavaScript 1.3 およびそれ以前のバージョン

ローカル変数として利用可能なのに加えて、arguments オブジェクトは Function オブジェクトのプロパティでもあり、関数名を前に置くこともできます。たとえば、もし関数 myFuncarg1arg2、および arg3 という名の 3 つの引数が渡されたなら、次のように引数を参照できます:

myFunc.arguments[0]
myFunc.arguments[1]
myFunc.arguments[2] 

JavaScript 1.1 および 1.2

JavaScript 1.1 および JavaScript 1.2 で利用可能だった次の機能は削除されました。:

  • 関数の各ローカル変数は arguments オブジェクトのプロパティです。たとえば、もし関数 myFuncmyLocalVar という名のローカル変数を持っていたなら、その変数を arguments.myLocalVar として参照できます。
  • 関数の各仮引数は arguments オブジェクトのプロパティです。たとえば、もし関数 myFuncarg1 および arg2 という名の 2 つの引数を持っていたなら、その引数を arguments.arg1 および arguments.arg2 として参照できます。(それらを arguments[0] および arguments[1] として参照することもできます。)

例: 複数の文字列を連結する関数を定義する

この例では、複数の文字列を連結する関数を定義します。この関数の唯一の仮引数は、連結する項目を区切る文字を指定する文字列です。この関数は次のように定義されます:

function myConcat(separator) {
  var result = "";

  // 区切りでない引数を反復する
  for (var i = 1; i < arguments.length; i++) {
    result += arguments[i] + separator;
  }

  return result;
}

この関数へ任意の数の引数を渡すことができ、各引数をリストの項目として使うリストを作れます。

// "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>";

  // リスト形式でない引数を反復する
  for (var i = 1; i < arguments.length; i++) {
    result += "<li>" + arguments[i] + "</li>";
  }

  result += "</" + type + "l>"; // リストの終了

  return result;
}

この関数には任意の数を渡すことができ、指定されたリスト形式のリストに第二引数以降の各引数を項目として追加します。

var listHTML = list("u", "One", "Two", "Three");

/* listHTML の内容は以下の様な文字列となります。

"<ul><li>One</li><li>Two</li><li>Three</li></ul>"

*/

Document Tags and Contributors

Contributors to this page: ethertank
最終更新者: ethertank,