Saya telah melihat beberapa kode node.js sebelumnya, dan saya perhatikan bahwa orang yang menulisnya sepertinya menyukai sintaks berikut:
var fn = function (param) {
var paramWithDefault = null == param ? 'Default Value' : param;
}
Atas apa yang saya anggap lebih ringkas:
var fn = function (param) {
var paramWithDefault = param || 'Default Value';
}
Saya bertanya-tanya apakah bentuk kedua sebenarnya sintaksis JavaScript yang lebih dapat diterima secara sosial, saya sudah melihatnya lebih sering di alam liar daripada operator ternary untuk tujuan ini.
Saya perhatikan bahwa dalam contoh pertama dia menggunakan double sama dengan (bukan triple sama dengan) yang berarti akan dihitung "tidak terdefinisi" sebagai nol, yang akan mengurangi satu dampak yang dapat saya pikirkan. Namun, saya telah membaca di banyak tempat bahwa == adalah operator yang agak jahat dalam JavaScript (JSLint sangat menentangnya, IIRC).
javascript
syntax
Ed James
sumber
sumber
Jawaban:
Karena kode ini akan dievaluasi menjadi 'Nilai Default' setiap kali Anda memasukkan 0, "", false, atau beberapa nilai palsu lainnya.
Mungkin tidak menggigit Anda tentang cara Anda menggunakan fungsi khusus ini, tetapi itu adalah pola yang buruk untuk dihindari ketika Anda benar-benar peduli untuk melewatkan hal-hal seperti string kosong atau 0 atau boolean.
sumber
var txt = 'Hello, ' + (user_name||'User') + '!';
akan berhasil, tetapi tanpa tanda kurung - Anda akan mendapatkannyaundefined
. jsfiddle.net/4mFAB/1Yang benar-benar Anda butuhkan adalah operator penggabungan nol. Tetapi melihat bahwa javascript tidak benar-benar memilikinya, programmer biasanya menggunakan '||' untuk berdiri untuk itu.
Namun, keduanya masuk akal. Bagi mereka yang tidak mengerti apa itu operator null coalesce, operator ternary mungkin lebih mudah dipahami.
sumber
[false-part, true-part]
dengan operator yang terpisah jika[..][bool(condition)]
digabungkan menjadi[false-part, true-part][bool(condition)]
. Jika Anda ingin perilaku malas, Anda dapat dengan lambda bagian yang benar dan yang salah.