Rest parameters

by 1 contributor:

This article is in need of an editorial review.

This translation is incomplete. Please help translate this article from English.

これは Harmony(ECMAScript 6) 提案の一部であり、実験段階の技術です。
この技術の仕様は安定していません。ブラウザ互換性の一覧表を確認してください。またこれらの構文や動作は、仕様変更などにより、新しいバージョンのブラウザでは変更される可能性があるという点に注意してください。

rest parameter 構文は、配列としての引数の不特定多数を表現することができます。

構文

function(a, b, ...theArgs) {
  // ...
}

説明

関数の最後の名前付き引数が...で前置されていた場合、0からtheArgs.lengthまでの要素が関数に渡される実引数によって供給されている配列になります。

上記の例では、theArgsは、(最初の引数はaにマッピングされ、2番目の引数はbにマッピングされるので)関数の3番目の引数とすべての連続した引数を集めます。

rest parametersとargumentsオブジェクトの間の違い

rest parametersとargumentsオブジェクトの間に三つの主な違いがあります。:

  • rest parametersは別々の名前が与えられていないだけです。ところが一方、 argumentsオブジェクトは、関数に渡されるすべての引数を含みます。;
  • argumentsオブジェクトは実配列ではありません。ところが一方、rest parametersは、Arrayインスタンスです。これは、sortmapforEachpopのようなメソッドが直接に適用することができることを意味します。
  • arguments オブジェクトは、(calleeプロパティのように)自身への追加機能の特定を持っています。

引数から配列まで

rest parametersは引数によって誘導された定型的なコードを減らすために導入されました。

// Before rest parameters, the following could be found:
function f(a, b){
  var args = Array.prototype.slice.call(arguments, f.length);

  // ...
}

// to be equivalent of

function(a, b, ...args) {
  
}

theArgsは配列であるので、lengthプロパティを使用することによって要素の数を取得できます。:

function fun1(...theArgs) {
  console.log(theArgs.length);
}

fun1();  // 0
fun1(5); // 1
fun1(5, 6, 7); // 3

次の例では、二番目の引数から最後の引数までを集めるためにrest parametersを使用します。それから、最初の引数によってそれらを乗算します。:

function multiply(multiplier, ...theArgs) {
  return theArgs.map(function (element) {
    return multiplier * element;
  });
}

var arr = multiply(2, 1, 2, 3); 
console.log(arr); // [2, 4, 6]

次の例では、rest parameters上でArrayメソッドを使用できることを示します。しかし、argumentsオブジェクト上ではできません。:

function sortRestArgs(...theArgs) {
  var sortedArgs = theArgs.sort();
  return sortedArgs;
}

console.log(sortRestArgs(5,3,7,1)); // shows 1,3,5,7

function sortArguments() {
  var sortedArgs = arguments.sort(); 
  return sortedArgs; // this will never happen
}

// throws a TypeError: arguments.sort is not a function
console.log(sortArguments(5,3,7,1));

argumentsオブジェクト上でArrayメソッドを使用するために、最初に実配列に変換する必要があります。

仕様

仕様 ステータス コメント
ECMAScript 6 (ECMA-262)
The definition of 'Function Definitions' in that specification.
勧告候補 初期定義。

ブラウザ実装状況

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート 未サポート 15.0 (15.0) 未サポート 未サポート 未サポート
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート 未サポート 未サポート 15.0 (15.0) 未サポート 未サポート 未サポート

関連情報

ドキュメントのタグと貢献者

Contributors to this page: shide55
最終更新者: shide55,
サイドバーを隠す