名もなきノンプログラマーの備忘録

ノンプロの視点からプログラミング?について好き勝手に書き綴ります。

【JavaScript】argumentsオブジェクト 引数の取得

argumentsオブジェクト 引数の取得

argumentsオブジェクトを見てみる

引数を取得するための配列風オブジェクトargumentsの記事です。

argumentsは下記のように必ず関数のスコープ内で使います。グローバルオブジェクトとして使うことはありません。

function aaaa(x, y){
  console.log(arguments);
}
//関数実行
aaaa(20,'ee'); //⇒Arguments(2) [20, 'ee', callee: ƒ, Symbol(Symbol.iterator): ƒ]

公式ページからもわかるとおり、arguments[0]が1番目の引数に当たり、arguments[1]が2番目の引数になっているので、配列風オブジェクトという感じがします。

console.log(typeof arguments); //⇒object

配列風オブジェクトを配列にする

公式ページでも紹介されているとおり、下記のように引数だけの配列にできます。

function aaaa(x, y){
   var args = Array.prototype.slice.call(arguments);
   console.log(args);
}
aaaa(20, 'ee');//[20,'ee']と出力

他に2つ紹介されています。

var args = Array.from(arguments);

下記記法が一番簡単で、私は一番気に入っています。

var args = [...arguments];

仮引数を書く必要がない

argumentsオブジェクトさえあれば、仮引数を書く必要がまったくありません

function test(){
  var args = [...arguments];
  alert(args[0]);
  alert(args[1]);
  alert(args[2]);
}

実引数を入れて実行してみます。

test('2021年','1月','9日');

「2021年」「1月」「9日」と順番にalertが実行されるのがわかります。

どの関数の引数かを明記することもできる

例えば、aaaaという関数があったとします。

function aaaa(){
  console.log(aaaa.arguments);
}

上記のようにargumentsの前に関数名をつけることで、どの関数の引数オブジェクトなのか指定することが可能になります。ただしローカルスコープで使うことが条件であり、下記のようにグローバルスコープで使っても無意味になります。

console.log(aaaa.arguments);//⇒null
function aaaa(){
  
}

そのため、こういうことができます。下記のように定義し実行してみます。

function aaaa(){
  function bbbb(){
     console.log(aaaa.arguments);
     console.log(bbbb.arguments);
  }
  bbbb(1,2);
}
//aaaa実行
aaaa(3,4);
//⇒Arguments(2) [3, 4, callee: ƒ, Symbol(Symbol.iterator): ƒ]
//⇒Arguments(2) [1, 2, callee: ƒ, Symbol(Symbol.iterator): ƒ]

参考
www.namonakiuser.com

下記ページが参考になりました。
developer.mozilla.org