Saya membuat fungsi seperti ini:
function saveItem(andClose = false) {
}
Ini berfungsi dengan baik di Firefox
Di IE memberikan kesalahan ini di konsol:
Expected ')'
Di Chrome, ini memberikan kesalahan ini di konsol:
Uncaught SyntaxError: Unexpected token =
Kedua browser menandai sumber kesalahan sebagai baris pembuatan fungsi.
javascript
jquery
Cakar
sumber
sumber
Jawaban:
Anda tidak dapat melakukan ini, tetapi Anda dapat melakukan sesuatu seperti:
Ini sering disingkat menjadi seperti:
Memperbarui
Di atas benar untuk ECMAScript <= 5. ES6 telah mengusulkan parameter Default . Jadi di atas malah bisa dibaca:
sumber
name = name || 'Bob';
tidak boleh digunakan karena jika nama disetel ke nilai falsey, default akan digunakan sebagai pengganti namaname = name || 'Bob'
digunakanname = (name === undefined) ? '' : name;
Itu bukan sintaks ECMAScript yang valid, tetapi sintaks yang valid untuk superset fitur Mozilla yang mereka tambahkan ke implementasi bahasa mereka.
Sintaks penetapan parameter default kemungkinan besar ada di ECMAScript 6.
sumber
foo = foo || "the default"
. Atau Anda dapat memeriksa.length
dariarguments
objek. Atau Anda cukup menguji setiap parameterundefined
. Ada berbagai kesempatan untuk menggunakan masing-masing.Javascript tidak mengizinkan penentu "default".
Cara cepat untuk melakukan apa yang Anda inginkan adalah dengan mengubah:
sebagai berikut:
sumber
andClose
ke salah itu 0 ... tidak seperti yang saya harapkan ...var andClose = andClose === undefined? false: andClose;
Itu akan memungkinkan Anda untuk meneruskan0
ke fungsi dan tidak menggantinya denganfalse
.Kode yang Anda berikan tidak akan berjalan di Chrome <versi 49: https://kangax.github.io/compat-table/es6/#test-default_function_parameters
Anda menggunakan sintaks ECMAScript 2015 yang valid:
Menurut pendapat saya, cara terbaik untuk menggunakan fitur ES2015 adalah menggabungkan aset dengan Browserify atau WebPack , dengan langkah menggunakan Babel untuk melakukan trans-compile ES2015 ke ES5. Dengan begitu Anda tidak perlu khawatir tentang bagan kompatibilitas browser ES2015 itu. Ini menyakitkan untuk memulai pertama kali, tetapi sepadan.
sumber
Dalam kasus Anda, Anda memiliki alternatif lain untuk memastikan bahwa variabel Anda adalah boolean:
Nilai defaultnya adalah
undefined
, dantrue == undefined
=>false
, jadi nilai default Anda adalahfalse
:)sumber
andClose
variabel sudah ditetapkan dalam cakupan ini