かすてらすねお。

見聞録的ななにか。

JavaScriptの関数仮引数にデフォルト値を設定する安全な方法

クライアントサイドスクリプトを書いていた時のこと


ある関数に、実引数の無いときは任意の値を仮引数に渡し、実引数の有るときは実引数を仮引数に渡す、ということがしたかったので、以下のようにしてみた。

function(word=""){
  ...
}

Firefox22.0(2013年7月最新)で検証すると、これを含むJavaScriptは問題無く動いた。
ところがぎっちょんちょん!ChromeOpera、IEでは動かないではないか!
慌ててChromeデベロッパーツールで確認すると、まさにこの書き方がイカンらしい。
文法的に正しいかどうかをすぐに確かめられなかったので、ひとまず他の方法を探した。
JavaScriptのfunctionの引数にデフォルト値を設定する - 桜ヶ丘日記

function(){
  var word = (arguments.length > 0) ? arguments[0] : '';
  ...
}

こちらのブログで紹介されていた方法。
argumentsオブジェクトは関数の実引数にアクセスできるし、lengthプロパティもあるので可変長引数もできちゃう。これを利用したのが上のコードで、引数の数によって実引数にアクセスするか否かを表している。
この方法を採ったところ、すべてのブラウザで正常にコードが動作してくれた。