JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptのレストパラメータ(Rest Parameters)とargumentsオブジェクトの違いとは?

JavaScriptで関数に渡された複数の引数を扱う方法として、「レストパラメータ」と「argumentsオブジェクト」の2つがあります。どちらも可変長の引数を処理するために使われますが、挙動や特性には重要な違いがあります。本記事では、それぞれの特徴と相違点をわかりやすく解説します。

レストパラメータ(Rest Parameters)とは

レストパラメータを使うと、複数の引数をひとつの配列として受け取ることができます。ES6(ECMAScript 2015)で導入されたこの機能により、開発者はこれまでよりも簡単に可変長引数を扱えるようになりました。

レストパラメータは、パラメータ名の前にドット3つ「...」を付けることで定義します。

function sum(...numbers) {
  return numbers.reduce((total, n) => total + n, 0);
}

console.log(sum(1, 2, 3)); // 6

argumentsオブジェクトとは

argumentsオブジェクトは、現在実行中の関数に渡されたすべての引数を表すオブジェクトです。関数内で宣言なしに自動的に利用でき、渡された引数へインデックス番号でアクセスできます。

function showArgs() {
  console.log(arguments.length); // 引数の個数
  console.log(arguments[0]);     // 最初の引数
}

レストパラメータとargumentsオブジェクトの違い

両者の主な違いは以下の通りです。

  • 含まれる引数の範囲: argumentsオブジェクトには関数に渡されたすべての引数が含まれます。一方、レストパラメータには、他のパラメータ名が割り当てられていない残りの引数のみが格納されます。
  • 配列かどうか: レストパラメータは本物のArray(配列)インスタンスであるため、mapsortpopなどの配列メソッドをそのまま使用できます。一方、argumentsオブジェクトは配列ではなく配列風(array-like)のオブジェクトなので、これらのメソッドを直接呼び出すことはできません。
  • アロー関数での利用: アロー関数にはargumentsオブジェクトが存在しませんが、レストパラメータは問題なく使用できます。

まとめ

現代のJavaScriptでは、配列メソッドが使え、アロー関数にも対応しているレストパラメータの利用が推奨されています。argumentsオブジェクトは従来のコードやレガシー環境との互換性のために知っておくと良いでしょう。

  1. JavaScriptのデフォルトパラメータとレストパラメータの違いとは?使い方を徹底解説

    デフォルトパラメータとは デフォルトパラメータは、関数の引数をより手軽に扱うために導入された機能です。仮引数にあらかじめデフォルト値を設定しておくことで、関数呼び出し時に値が渡されなかった場合、あるいは undefined が渡された場合にのみ、そのデフォルト値で仮引数が初期化されます。 サンプルコード <html>    <body>       <script>         &nb

  2. JavaとJavaScriptの違いとは?歴史・技術・使い分けを徹底解説

    ウェブ開発者のジェレミー・キースは2009年、「JavaとJavaScriptの関係は、ハムとハムスターの関係のようなものだ」と語りました。この比喩がどれほど正確かは議論の余地がありますが、その本質は的確です。共通する言語的ルーツを持つにもかかわらず、JavaとJavaScriptはまったく異なる2つのプログラミング言語なのです。年月とともに両者の重なりも多少増えましたが、今なおJavaScriptはウェブサイトにインタラクティブ性をもたらすフロントエンド言語の主流であり続け、Javaはサーバーサイドやアプリケーション開発で人気を保っています。開発者を採用したい方、プログラミングを学びたい方