クライアントサイドスクリプトを書いていた時のこと
ある関数に、実引数の無いときは任意の値を仮引数に渡し、実引数の有るときは実引数を仮引数に渡す、ということがしたかったので、以下のようにしてみた。
function(word=""){ ... }
Firefox22.0(2013年7月最新)で検証すると、これを含むJavaScriptは問題無く動いた。
ところがぎっちょんちょん!Chrome、Opera、IEでは動かないではないか!
慌ててChromeのデベロッパーツールで確認すると、まさにこの書き方がイカンらしい。
文法的に正しいかどうかをすぐに確かめられなかったので、ひとまず他の方法を探した。
JavaScriptのfunctionの引数にデフォルト値を設定する - 桜ヶ丘日記
function(){ var word = (arguments.length > 0) ? arguments[0] : ''; ... }
こちらのブログで紹介されていた方法。
argumentsオブジェクトは関数の実引数にアクセスできるし、lengthプロパティもあるので可変長引数もできちゃう。これを利用したのが上のコードで、引数の数によって実引数にアクセスするか否かを表している。
この方法を採ったところ、すべてのブラウザで正常にコードが動作してくれた。