【JavaScript】デフォルト引数とは何か?引数の中のイコール=の意味と使い方を実例で解説|undefinedやNaNを回避する方法(引数の数が足りない時の対処法)

javascript-prograshi(プロぐらし)-kv JavaScript
記事内に広告が含まれていることがあります。

デフォルト引数とは何か?

JavaScriptにはデフォルト引数という機能があります。

デフォルト引数とは、関数処理で引数が渡されなかった場合に、渡されなかった引数の値に指定した値を代入するものです。


デフォルト引数のメリット

引数の数が足りないと何が起こるか?

JavaScriptでは関数で引数が定義してある場合に、その関数を呼び出したときに引数の数が足りない(あるいは渡されていない)と、引数の値を「undefined」とします。

結果として、渡す引数の数が足りない四則演算の処理などは結果が「NaN」になってしまいます。

undefinedやNaNとなる例

const totalPrice = ( price, tax ) => { 
  console.log("price:", price, "tax:", tax)
  return Math.floor( price * tax ) + "円" 
}

//引数なしで呼び出す場合
totalPrice()

//処理結果
price: undefined tax: undefined
'NaN円'

本来引数が2つ必要なtotalPriceで、引数を指定していない場合は、中で使われている引数「price」と「tax」のいずれもが「undefined」になります。

計算結果も「NaN」となっています。


デフォルト引数のメリット

デフォルト値を設定しておくと、「undefined」の代わりに指定した値を代入するので、処理結果がおかしくなることを防ぐことができます。

しかも、複数の引数が必要な場合に、少ない数の引数しか渡されていない時は、渡された引数を優先し、残りの引数にはデフォルト値を代入する処理をしてくれます。


デフォルト値の設定方法

書き方

デフォルト値の設定方法は簡単で、関数を定義したときに引数の横に「=値」とするだけです。

function( 引数1=値1, 引数2=値2,,,, ){ 処理 }

 ↓ アロー関数の場合(functionの省略表記)

( 引数1=値1, 引数2=値2,,,, ) => { 処理 }


実例:引数が1つもない場合

以下のように引数「price」と「tax」の二つをとり、掛け合わせた結果を返す計算処理があるとします。

このとき、priceのデフォルト引数に100, taxのデフォルト引数に1.10を指定する場合は以下のようになります。

const totalPrice = ( price=100, tax=1.10 ) => { 
  console.log("price:", price, "tax:", tax)
  return Math.floor( price * tax ) + "円" 
}

//引数なしで呼び出す場合
totalPrice()

//処理結果
price: 100 tax: 1.1
'110円'

本来引数が2つ必要なtotalPriceで、引数を指定していない場合は、中で使われている引数「price」と「tax」のいずれもにデフォルト引数が適用されます。

計算処理は正しく動き、結果は「110円」となっています。


実例:引数が渡されているが、数が足りない場合

上記と同じく引数「price」と「tax」の二つをとり、掛け合わせた結果を返す計算処理があるとします。priceのデフォルト引数に100, taxのデフォルト引数に1.10が指定してあります。

このときに、引数を1つだけ渡す場合は以下のようになります。

const totalPrice = ( price=100, tax=1.10 ) => { 
  console.log("price:", price, "tax:", tax)
  return Math.floor( price * tax ) + "円" 
}

//引数1つで呼び出す場合
price1 = 1000
totalPrice( price1 )

//処理結果
price: 1000 tax: 1.1
'1100円'

本来引数が2つ必要なtotalPriceで、引数が1つだけ指定してある場合は、1つ目の引数「price」のみ指定した値が入り、2つ目の引数「tax」のみにデフォルト引数が適用されます。

計算処理は正しく動き、結果は「1100円」となっています。


実例:引数の数が合っている場合

上記と同じく引数「price」と「tax」の二つをとり、掛け合わせた結果を返す計算処理があるとします。priceのデフォルト引数に100, taxのデフォルト引数に1.10が指定してあります。

このときに、引数を2つ渡す場合は以下のようになります。

const totalPrice = ( price=100, tax=1.10 ) => { 
  console.log("price:", price, "tax:", tax)
  return Math.floor( price * tax ) + "円" 
}


price1 = 1000
tax1 = 1.08

//引数2つで呼び出す場合
totalPrice( price1, tax1 )

//処理結果
price: 1000 tax: 1.08
'1080円'

本来引数が2つ必要なtotalPriceに、引数が2つ渡されるので、1つ目の引数「price」と2つ目の引数「tax」に指定した値が入ります。

デフォルト引数の値は無視されます。

計算処理は正しく動き、結果は「1080円」となっています。


補足:引数の数が多くてもエラーにはならない

なお、JavaScriptでは引数の数が、関数の処理に必要な数以上に渡されていてもエラーにはなりません。

不要な引数は自動的に無視されます。

const totalPrice = ( price=100, tax=1.10 ) => { 
  console.log("price:", price, "tax:", tax)
  return Math.floor( price * tax ) + "円" 
}


price1 = 1000
tax1 = 1.08
text = "test"
price2 = 321
tax2 = 3.1

//余計な引数をつけて渡す場合
totalPrice( price1, tax1, text, price2, tax2 )

//処理結果
price: 1000 tax: 1.08
'1080円'

余計な引数がたくさん渡されていますが、計算処理は正しく動いています。


参考リンク

MDN公式 デフォルト引数


タイトルとURLをコピーしました