108

次のような関数を作成しました。

function saveItem(andClose = false) {

}

Firefoxでは問題なく動作します

IE では、コンソールに次のエラーが表示されます。 Expected ')'

Chrome では、コンソールに次のエラーが表示されます。 Uncaught SyntaxError: Unexpected token =

どちらのブラウザも、エラーの原因を関数作成行としてマークします。

4

5 に答える 5

166

これを行うことはできませんが、代わりに次のようなことを行うことができます。

function saveItem(andClose) {
   if(andClose === undefined) {
      andClose = false;
   }
}

これは多くの場合、次のように短縮されます。

function setName(name) {
  name = name || 'Bob';
}

アップデート

上記はECMAScript<=5に当てはまります。ES6はデフォルトパラメータを提案しています。したがって、上記は代わりに次のように読むことができます。

function setName(name = 'Bob') {}
于 2013-03-02T19:53:33.787 に答える
14

これは有効な ECMAScript 構文ではありませんが、Mozilla が言語の実装に追加する機能のスーパーセットの有効な構文です。

デフォルトのパラメーター割り当て構文は、ECMAScript 6 で導入される可能性があります。

于 2013-03-02T19:51:30.357 に答える
9

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
    }
}
于 2013-03-02T19:55:30.353 に答える
2

あなたが提供したコードは Chrome < バージョン 49 では実行されません: https://kangax.github.io/compat-table/es6/#test-default_function_parameters

有効な ECMAScript 2015 構文を使用しました:

私の意見では、ES2015 の機能を使用する最善の方法は、アセットをBrowserifyまたはWebPackにバンドルし、 Babelを使用してES2015 を ES5 にトランスコンパイルする手順を実行することです。そうすれば、ES2015 ブラウザー互換性チャートについて心配する必要はありません。初めて始めるのは苦痛ですが、それだけの価値があります。

于 2015-12-27T14:18:30.090 に答える