Javacript menggunakan evaluasi hubung singkat untuk operator logis ||
dan &&
. Namun, ini berbeda dengan bahasa lain karena mengembalikan hasil dari nilai terakhir yang menghentikan eksekusi, bukan nilai true
, atau false
.
Nilai-nilai berikut ini dianggap salah dalam JavaScript.
- Salah
- batal
""
(string kosong)
- 0
- Nan
- tidak terdefinisi
Mengabaikan aturan prioritas operator , dan menjaga hal-hal sederhana, contoh-contoh berikut menunjukkan nilai mana yang menghentikan evaluasi, dan dikembalikan sebagai hasilnya.
false || null || "" || 0 || NaN || "Hello" || undefined // "Hello"
5 nilai pertama hingga NaN
palsu sehingga mereka semua dievaluasi dari kiri ke kanan, sampai memenuhi nilai kebenaran pertama - "Hello"
yang membuat seluruh ekspresi benar, jadi apa pun yang lebih jauh ke atas tidak akan dievaluasi, dan "Hello"
akan dikembalikan sebagai hasil dari ekspresi . Demikian pula, dalam hal ini:
1 && [] && {} && true && "World" && null && 2010 // null
5 nilai pertama semuanya benar dan dievaluasi sampai memenuhi nilai falsy pertama ( null
) yang membuat ekspresi salah, jadi 2010
tidak dievaluasi lagi, dan null
dikembalikan sebagai hasil dari ekspresi.
Contoh yang Anda berikan adalah memanfaatkan properti JavaScript ini untuk melakukan tugas. Ini dapat digunakan di mana saja di mana Anda perlu mendapatkan nilai true atau falsy pertama di antara seperangkat nilai. Kode ini di bawah ini akan menetapkan nilai "Hello"
untuk b
karena membuat lebih mudah untuk menetapkan nilai default, bukannya melakukan jika-lain cek.
var a = false;
var b = a || "Hello";
Anda dapat menyebut contoh di bawah ini sebagai eksploitasi fitur ini, dan saya percaya ini membuat kode lebih sulit dibaca.
var messages = 0;
var newMessagesText = "You have " + messages + " messages.";
var noNewMessagesText = "Sorry, you have no new messages.";
alert((messages && newMessagesText) || noNewMessagesText);
Di dalam lansiran, kami memeriksa apakah messages
ada kesalahan, dan jika ya, maka evaluasi dan kembali noNewMessagesText
, jika tidak, evaluasi dan kembali newMessagesText
. Karena itu salah dalam contoh ini, kami berhenti di noNewMessagesText dan memberitahukan "Sorry, you have no new messages."
.
$f=$a or $f=$b or $f=$c; // etc
. PHP memiliki||
operator danor
operator, yang melakukan pekerjaan yang sama; Namunor
dievaluasi setelah penugasan sementara||
dievaluasi sebelumnya. Ini juga memberi Anda gaya bahasa Inggris$a=getSomething() or die('oops');