JavaScript Logical Conundrum: Menilai (a== 1 && a==2 && a==3) kepada True
Persoalan tentang sama ada ungkapan (a== 1 && a==2 && a==3) boleh dinilai benar dalam JavaScript telah menyebabkan ramai pengaturcara menggaru kepala mereka. Keadaan yang kelihatan tidak masuk akal ini menimbulkan cabaran kepada pemahaman kita tentang pengendali logik dan kesamaan objek.
Untuk memahami kemungkinan penilaian ini, mari kita mendalami tingkah laku operator == dalam JavaScript. Tidak seperti pengendali ===, yang menyemak kesamaan ketat, termasuk jenis, == melakukan paksaan jenis sebelum membandingkan nilai. Ini boleh membawa kepada hasil yang tidak dijangka apabila membandingkan jenis data yang berbeza.
Jawapan kepada teka-teki ini terletak pada mengeksploitasi tingkah laku paksaan jenis ini. Dengan membuat objek dengan teliti dengan kaedah toString atau valueOf tersuai, kita boleh mengawal output perbandingan yang melibatkan objek tersebut. Caranya ialah dengan meminta kaedah mengembalikan nilai yang berbeza setiap kali ia digunakan, memenuhi ketiga-tiga syarat dalam ungkapan.
Pertimbangkan coretan JavaScript berikut:
<code class="javascript">const a = { i: 1, toString: function() { return a.i++; } }; if (a == 1 && a == 2 && a == 3) { console.log("Hello World!"); }</code>
Dalam contoh ini, objek 'a' mempunyai kaedah toString tersuai yang mengembalikan pembolehubah pembilang 'i'. Pada panggilan pertama, ia mengembalikan 1. Pada panggilan kedua, ia kembali 2. Dan pada panggilan ketiga, ia mengembalikan 3. Ini memenuhi ketiga-tiga syarat ungkapan, yang membawa kepada output "Hello World!"
Perlu ambil perhatian bahawa tingkah laku ini bukan amalan pengaturcaraan biasa. Walau bagaimanapun, ia menunjukkan kuasa memanipulasi kesamaan objek untuk tujuan tertentu, seperti menyelesaikan cabaran pengekodan atau meneroka kedalaman ciri berorientasikan objek JavaScript.
Atas ialah kandungan terperinci Bolehkah (a == 1 && a == 2 && a == 3) Pernah Menilai kepada Benar dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!