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 NaNpalsu 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 2010tidak dievaluasi lagi, dan nulldikembalikan 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 bkarena 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 messagesada 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 danoroperator, yang melakukan pekerjaan yang sama; Namunordievaluasi setelah penugasan sementara||dievaluasi sebelumnya. Ini juga memberi Anda gaya bahasa Inggris$a=getSomething() or die('oops');