Rumah  >  Artikel  >  hujung hadapan web  >  Bolehkah Operator `==` JavaScript Mencipta Penilaian Benar dengan Keadaan Bercanggah?

Bolehkah Operator `==` JavaScript Mencipta Penilaian Benar dengan Keadaan Bercanggah?

Patricia Arquette
Patricia Arquetteasal
2024-11-01 11:28:02526semak imbas

Can JavaScript's `==` Operator Create True Evaluations with Contradictory Conditions?

Bolehkah Persimpangan Logik Dinilai Benar dengan Keadaan Bercanggah?

Dalam pertanyaan temu bual menarik yang dikemukakan oleh sebuah syarikat teknologi terkenal, persoalan timbul: bolehkah ungkapan (a == 1 && a == 2 && a == 3) pernah menilai benar dalam JavaScript?

Pada mulanya, ini mungkin kelihatan tidak masuk akal memandangkan sifat keadaan yang kelihatan bertentangan. Walau bagaimanapun, dengan menyelidiki selok-belok pengendali kesamarataan JavaScript (==), jalan muncul ke arah menjawab teka-teki ini.

Pengendali kesamaan JavaScript, tidak seperti rakan sejawatannya (===), melakukan paksaan jenis, secara automatik menukar nilai kepada jenis biasa untuk perbandingan. Ini membuka pintu kepada manipulasi objek, terutamanya dengan fungsi toString (atau valueOf) tersuai, yang membenarkan penjanaan nilai dinamik.

Pertimbangkan contoh berikut:

const a = {
  i: 1,
  toString: function () {
    return a.i++;
  }
}

Dengan tersuai ini fungsi toString, setiap kali a secara tersirat dipaksa kepada rentetan (cth., untuk pengelogan), nilai i dalaman a meningkat. Ini menyediakan mekanisme untuk memenuhi ketiga-tiga syarat kesaksamaan:

a == 1 // true (initially i = 1)
a == 2 // true (after toString call, i = 2)
a == 3 // true (after second toString call, i = 3)

Oleh itu, dengan memanfaatkan kelakuan dinamik objek dan penukaran jenis tersirat ==, ia menjadi mungkin untuk ungkapan (a == 1 && a == 2 && a == 3) untuk menilai kepada benar dalam JavaScript.

Atas ialah kandungan terperinci Bolehkah Operator `==` JavaScript Mencipta Penilaian Benar dengan Keadaan Bercanggah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn