Saya selalu harus memasukkan ke null
dalam kondisi lain yang tidak memiliki apa pun. Apakah ada pula di sekitarnya? Misalnya
condition ? x = true : null;
pada dasarnya, apakah ada cara untuk melakukannya:
condition ? x = true;
Sekarang muncul sebagai kesalahan sintaksis
FYI, berikut adalah beberapa contoh kode nyata:
!defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null;
javascript
optimization
syntax-error
Oscar Godson
sumber
sumber
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.if (!defaults.slideshowWidth) defaults.slideshowWidth = obj.find('img').width()+'px'
Jawaban:
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:
=
yang akan diberi nilai kembalix = 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
Alih-alih contoh Anda
condition ? x=true : null ;
, di mana Anda menggunakan ekspresi ternary untuk menetapkan nilaix
, Anda bisa menggunakan ini:Ini masih merupakan ekspresi dan karena itu mungkin tidak lulus validasi, jadi pendekatan yang lebih baik akan
Yang terakhir akan lulus validasi.
Tetapi sekali lagi, jika nilai yang diharapkan adalah boolean, cukup gunakan hasil dari ekspresi kondisi itu sendiri
PEMBARUAN Terkait sampel Anda, ini mungkin lebih tepat:
sumber
i/else
kesalahan ketik karena tidak cukup karakter.void()
. Terima kasih.Tidak, itu membutuhkan tiga operan. Itu sebabnya mereka disebut operator ternary .
Namun, untuk apa yang Anda miliki sebagai contoh, Anda dapat melakukan ini:
Meskipun lebih aman untuk memiliki kawat gigi jika Anda perlu menambahkan lebih dari satu pernyataan di masa depan:
Sunting: Sekarang Anda menyebutkan kode aktual di mana pertanyaan Anda berlaku untuk:
sumber
Lebih sering orang menggunakan operator logis untuk mempersingkat sintaks pernyataan:
Tetapi dalam kasus khusus Anda, sintaksinya bisa lebih sederhana
Kode ini akan mengembalikan
defaults.slideshowWidth
nilai jikadefaults.slideshowWidth
dievaluasi ke true danobj.find('img').width()+'px'
nilai sebaliknya.Lihat Evaluasi Sirkuit Pendek dari operator logis untuk detailnya.
sumber
sumber
(defaults.slideshowWidth) || (defaults.slideshowWidth = obj.find('img').width()+'px')
ataudefaults.slideshowWidth = defaults.slideshowWidth || (obj.find('img').width()+'px')
Anda bisa menulis
Sehingga x tidak dimodifikasi ketika kondisinya salah.
Ini kemudian setara dengan
EDIT:
Ada beberapa alternatif - saya tidak mengatakan ini lebih baik / lebih buruk - hanya alternatif
Melewati nol sebagai parameter ketiga berfungsi karena nilai yang ada adalah nol. Jika Anda refactor dan mengubah kondisinya, maka ada bahaya bahwa ini tidak lagi benar. Melewati nilai yang ada sebagai pilihan ke-2 dalam penjaga ternary terhadap hal ini:
Lebih aman, tapi mungkin tidak sebaik untuk dilihat, dan lebih banyak mengetik. Dalam praktiknya, saya mungkin akan menulis
sumber
Dalam kasus Anda, saya melihat operator ternary sebagai mubazir. Anda bisa menetapkan variabel langsung ke ekspresi, menggunakan operator ||, &&.
akan menjadi :
Lebih jelas, lebih gaya "javascript".
sumber
Bagaimana dengan sederhana
sumber
Untuk menggunakan Operator Ternary tanpa yang lain di dalam deklarasi array atau objek, Anda dapat menggunakan operator spread ES6
...()
Dan untuk benda:
sumber asli
sumber