2013-03-02 17 views
32

私はこのような機能を作成しました:JavaScript関数とデフォルトパラメータ、IEで動作していないとChrome

function saveItem(andClose = false) { 

} 

それはIEでFirefoxの

で正常に動作し、コンソール上で、このエラーを与える: Expected ')'をChromeの場合

それはコンソールでこのエラーを与える: Uncaught SyntaxError: Unexpected token =

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

+0

Android株ブラウザ5.1.1はこちら、同じ問題はありません。 –

答えて

8

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

デフォルトのパラメータ割り付けの構文はそうのECMAScript 6に

+0

これでJavascript関数のデフォルト値を設定する最も良い方法は何ですか? – Talon

+1

@タロン:あなたの状況によって最適な方法は異なります。引数が偽でないことが分かっているなら、 'foo = foo || "デフォルト"。あるいは 'arguments'オブジェクトの' .length'をチェックすることもできます。あるいは、単に 'undefined'の各パラメータをテストすることもできます。それぞれを使用する異なる機会があります。 –

53

来るあなたがこれを行うことはできませんが、好きではなく、何かを行うことができます。これは、多くの場合のようなものに短縮され

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

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

更新

上記はECMAScript < = 5に該当します.ES6はDefault parametersを提案しています。したがって、上記の代わりに代わりに読むことができます:

function setName(name = 'Bob') {} 
+6

これは、ES6を実装せず、デフォルトパラメータでブレークするIE11以降で有効です。 –

+0

ありがとうございます!それを知らなかった! IEはうんざりですが、開発者は "非"ブラウザをサポートする以外の選択肢はありません。 – Fr0zenFyr

+1

'name = name ||名前が偽の値に設定されていると、名前の代わりにデフォルトが使用されるので、 'Bob';は使用しないでください。 –

4

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 
    } 
} 
+1

それは' andClose'をfalseに設定します。それは0です...私はそれが期待するものではありません。 – gdoron

+0

@gdoronこれを見てください:http://stackoverflow.com/questions/7615214/in-javascript-why-is-0-false-but-not-false-by-それ自体は、あなたが使用する言語について学ぶ必要がある癖です。 – JRomero

+0

もう1つの方法は、3行目を 'var andClose = andClose === undefined? 'に変更することです。 false:andClose; 'それは関数に' 0'を渡し、 'false'で置き換えられないようにします。 –

1

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

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

、ES2015の機能を使用するための最良の方法は、ES5にトランスコンパイルES2015にBabelを使用するためのステップと、BrowserifyまたはWebPackで資産をバンドルすることです。そうすれば、ES2015ブラウザー互換性チャートについて心配する必要はありません。はじめて始めるのは苦痛ですが、その価値はあります。

関連する問題