次のような関数を作成しました。
function saveItem(andClose = false) {
}
Firefoxでは問題なく動作します
IE では、コンソールに次のエラーが表示されます。
Expected ')'
Chrome では、コンソールに次のエラーが表示されます。
Uncaught SyntaxError: Unexpected token =
どちらのブラウザも、エラーの原因を関数作成行としてマークします。
次のような関数を作成しました。
function saveItem(andClose = false) {
}
Firefoxでは問題なく動作します
IE では、コンソールに次のエラーが表示されます。
Expected ')'
Chrome では、コンソールに次のエラーが表示されます。
Uncaught SyntaxError: Unexpected token =
どちらのブラウザも、エラーの原因を関数作成行としてマークします。
これを行うことはできませんが、代わりに次のようなことを行うことができます。
function saveItem(andClose) {
if(andClose === undefined) {
andClose = false;
}
}
これは多くの場合、次のように短縮されます。
function setName(name) {
name = name || 'Bob';
}
アップデート
上記はECMAScript<=5に当てはまります。ES6はデフォルトパラメータを提案しています。したがって、上記は代わりに次のように読むことができます。
function setName(name = 'Bob') {}
これは有効な ECMAScript 構文ではありませんが、Mozilla が言語の実装に追加する機能のスーパーセットの有効な構文です。
デフォルトのパラメーター割り当て構文は、ECMAScript 6 で導入される可能性があります。
Javascriptは「デフォルト」指定子を許可しません。
あなたが望むことをする簡単な方法は変えることです:
function saveItem(andClose = false) {
}
次のように:
function saveItem(andClose) {
// this line will check if the argument is undefined, null, or false
// if so set it to false, otherwise set it to it's original value
var andClose = andClose || false;
// now you can safely use andClose
if (andClose) {
// do something
}
}
あなたが提供したコードは Chrome < バージョン 49 では実行されません: https://kangax.github.io/compat-table/es6/#test-default_function_parameters
有効な ECMAScript 2015 構文を使用しました:
私の意見では、ES2015 の機能を使用する最善の方法は、アセットをBrowserifyまたはWebPackにバンドルし、 Babelを使用してES2015 を ES5 にトランスコンパイルする手順を実行することです。そうすれば、ES2015 ブラウザー互換性チャートについて心配する必要はありません。初めて始めるのは苦痛ですが、それだけの価値があります。