Pertama-tama, ekspresi ternary bukanlah pengganti untuk konstruksi if / else - yang setara dengan konstruksi if / else yang mengembalikan nilai. Yaitu, klausa if / else adalah kode, ekspresi ternary adalah ekspresi , yang berarti ia mengembalikan nilai.
Ini berarti beberapa hal:
- gunakan ekspresi ternary hanya ketika Anda memiliki variabel di sisi kiri
=
yang akan diberi nilai kembali
- hanya menggunakan ekspresi ternary ketika nilai yang dikembalikan adalah salah satu dari dua nilai (atau gunakan ekspresi bertingkat jika itu pas)
- setiap bagian dari ekspresi (setelah? dan setelah:) harus mengembalikan nilai tanpa efek samping (ekspresi
x = true
mengembalikan true karena semua ekspresi mengembalikan nilai terakhir, tetapi juga mengubah x tanpa x memiliki efek pada nilai yang dikembalikan)
Singkatnya - penggunaan ekspresi terner yang "benar" adalah
var resultofexpression = conditionasboolean ? truepart: falsepart;
Alih-alih contoh Anda condition ? x=true : null ;
, di mana Anda menggunakan ekspresi ternary untuk menetapkan nilai x
, Anda bisa menggunakan ini:
condition && (x = true);
Ini masih merupakan ekspresi dan karena itu mungkin tidak lulus validasi, jadi pendekatan yang lebih baik akan
void(condition && x = true);
Yang terakhir akan lulus validasi.
Tetapi sekali lagi, jika nilai yang diharapkan adalah boolean, cukup gunakan hasil dari ekspresi kondisi itu sendiri
var x = (condition); // var x = (foo == "bar");
PEMBARUAN
Terkait sampel Anda, ini mungkin lebih tepat:
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
condition ? x = true : null;
mungkin harus ditulis sebagaix = (condition ? true : null);
. Sebagai tambahan, dalam javascriptnull
bernilai false sehingga dalam hal ini Anda bisax = (condition);
dan mencapai hasil yang sama.