[JavaScript] 関数の引数に省略値を(直接)指定できない
JavaScriptの実装をしていて関数定義の仕方を間違えたために、つまらないことで随分時間をかけてしまいました。
メモとして残します。
JavaScriptで自作関数を作った場合、以下の様な感じになります。
function testMethod(value1, value2) { alert('Test value1=' + value1 + ' value2=' + value2); }
この時のvalue1、value2の引数に省略時の値を指定したいと思った場合
function testMethod(value1 = 10, value2 = 20) { ... }
のように書けば省略できるように思えますが、この記述はエラーとなります。
JavaScriptでは引数の省略はできないようです。
とはいえ、JavaScriptでは引数を省略して呼び出してもエラーとはなりませんので、
関数定義は、function testMethod(value1, value2) としておいて、
呼び出しの時に、
testMethod();
とすれば、問題なく実行ができます。
このとき、value1, value2はundefinedとなりますので、省略時初期値を指定したい場合は、関数内部で判定すればOKです。
function TestMethod(value1, value2) { if (value1 == undefined) value1 = 10; if (value2 == undefined) value2 = 20; alert('Test value1=' + value1 + ' value2=' + value2); }
分かっていれば大丈夫ですが、PHPやC#などで慣れていると、ついつい関数定義内に省略値を記入してしまいます。
また、困ったことに間違った記述をしていても、FireFoxでは何事もなかったように動いてしまいます。
ここで気づかずにGoogleChromeやiPhoneのSafari上などで動作させると動かないため、あれ??となります。
全然気づかずに、なんで動かないんだろう?と数時間経過しました。。。。
これは、JavaScriptの記述全般に言えることかもしれません。
ものすごく初歩的なことですが注意しましょう。
VisualStudioなどの超便利なIDEに慣れきっているとダメですね。
== ランキングに参加しています。ぜひクリックお願いします ==
あけましておめでとうございます。2013 いつのまにかSafariのWindows版が公開停止になってる(気づくの遅い)