Tanda tanya dan titik dua dalam JavaScript


Jawaban:


363

Ini disebut Operator Bersyarat (yang merupakan operator ternary ).

Ini memiliki bentuk condition:? value-if-true: value-if-false
Pikirkan ?sebagai "lalu" dan :sebagai "lain".

Kode Anda setara dengan

if (max != 0)
  hsb.s = 255 * delta / max;
else
  hsb.s = 0;

27
"?" bukan operator ternary; "?:" adalah operator ternary. Membicarakan tentang "?" sebagai operator ternary adalah seperti berbicara tentang Abbott tanpa Costello, Laurel tanpa Hardy, Cheech tanpa Chong ....
Jason S

11
Ok, ok ... sekarang saya menggunakan kata ganti yang mendua, senang? :)
Greg

14
Untuk menjadi bertele-tele, itu sebuah operator ternary, yang terjadi menjadi satu-satunya di kebanyakan bahasa pemrograman. Setiap operator yang bekerja pada 3 bagian adalah operator ternary, sama seperti additionoperator biner yang beroperasi pada ekspresi sebelum dan sesudahnya (mis. 1 + 2 plus beroperasi pada 1 dan 2), atau negasi adalah operator unary (mis. -X di mana nilai x dinegasikan).
Davy8

6
@ Davy8: Dan yang ini bisa disebut operator kondisional untuk lebih spesifik.
Siput mekanik

Bagaimana jika Anda ingin memeriksa dua syarat?
Thanos Dodd

38

Dipasangkan dengan benar untuk kejelasan, itu

hsb.s = (max != 0) ? (255 * delta / max) : 0;

artinya kembali juga

  • 255*delta/max jika maks! = 0
  • 0 jika maks == 0

7

Ini mungkin sedikit lebih jelas ketika ditulis dengan tanda kurung sebagai berikut:

hsb.s = (max != 0) ? (255 * delta / max) : 0;

Apa yang dilakukannya adalah mengevaluasi bagian dalam tanda kurung pertama. Jika hasilnya benar maka bagian setelah? dan sebelum: dikembalikan. Jika salah, maka yang berikut: dikembalikan.


7
hsb.s = max != 0 ? 255 * delta / max : 0;

?adalah operator ternary. Ini bekerja seperti ifdalam hubungannya dengan:

!= berarti tidak sama

Jadi, bentuk panjang dari garis ini adalah

if (max != 0) { //if max is not zero
  hsb.s = 255 * delta / max;
} else {
  hsb.s = 0;
}

1

? : bukankah ini operator ternary?

var x= expression ? true:false


3
Itu salah satu contoh penggunaannya, tetapi sebenarnya ada versi yang lebih pendek dari pernyataan Anda, untuk kasus-kasus di mana Anda hanya ingin BENAR / SALAH: Jika 'ekspresi' hanya beberapa variabel dengan angka atau string di dalamnya, "var x = !! ekspresi "akan membuatnya menjadi hasil boolean.
Scott Lahteine


-3

Hati-hati dengan ini. A -1 mengevaluasi true meskipun -1! = Benar dan -1! = Salah. Percayalah, saya sudah melihatnya terjadi.

begitu

-1? "true side": "false side"

mengevaluasi ke "sisi sebenarnya"


3
"Dalam JavaScript, nilai kebenaran adalah nilai yang dianggap benar ketika dievaluasi dalam konteks Boolean. Semua nilai itu benar kecuali mereka didefinisikan sebagai falsy (yaitu, kecuali untuk false, 0," ", null, undefined, dan NaN) . " Inilah sebabnya mengapa -1 dievaluasi sebagai benar. ( developer.mozilla.org/en-US/docs/Glossary/Truthy )
jobmo
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.