Bolehkah Kesamaan Longgar JavaScript (==) Pernah Menjadikan (a == 1 && a == 2 && a == 3) Benar?

Barbara Streisand
Lepaskan: 2024-11-03 06:35:30
asal
265 orang telah melayarinya

Can JavaScript's Loose Equality (==) Ever Make (a == 1 && a == 2 && a == 3) True?

Adakah (a== 1 && a ==2 && a==3) Pernah Benar?

Soalan:

Bolehkah ungkapan (a== 1 && a ==2 && a==3) pernah menilai benar dalam JavaScript, walaupun terdapat ketidakkonsistenan logik?

Memahami Penilaian Ungkapan:

Biasanya, ungkapan (a== 1 && a ==2 && a==3) akan sentiasa menilai palsu kerana nilai 'a' tidak boleh serentak menjadi 1, 2, dan 3. Walau bagaimanapun, pengendali kesamaan JavaScript (==) mempunyai beberapa keanehan apabila berurusan dengan nilai bukan primitif seperti objek.

Penukaran Nilai Tersuai:

JavaScript membenarkan objek mentakrifkan fungsi toString() atau valueOf() mereka sendiri, yang digunakan untuk menukar objek kepada nilai primitif untuk tujuan perbandingan. Dengan memanfaatkan ini, adalah mungkin untuk mencipta objek yang menukar nilainya setiap kali ia ditukar.

Objek Tersuai dengan Fungsi Dynamic toString():

Pertimbangkan perkara berikut objek:

<code class="js">const a = {
  i: 1,
  toString: function () {
    return a.i++;
  }
}</code>
Salin selepas log masuk

Objek ini mempunyai sifat 'i' dan fungsi toString() tersuai. Setiap kali objek ditukar kepada nilai primitif (cth., melalui == atau console.log()), fungsi toString() dipanggil, mengembalikan nilai semasa 'i' dan menambahnya.

Helah Penilaian Ungkapan:

Menggunakan objek tersuai ini, ungkapan (a == 1 && a == 2 && a == 3) kini boleh menilai kepada benar:

<code class="js">if(a == 1 && a == 2 && a == 3) {
  console.log('Hello World!');
}</code>
Salin selepas log masuk

Perbandingan pertama (a == 1) mengembalikan benar kerana fungsi toString() mengembalikan 1. Perbandingan kedua (a == 2) juga mengembalikan benar kerana fungsi toString() dipanggil semula, mengembalikan 2. Begitu juga, perbandingan ketiga (a == 3) mengembalikan benar, menyebabkan keseluruhan ungkapan menilai kepada benar.

Kesimpulan:

Walaupun nampaknya berlawanan dengan intuisi, adalah mungkin untuk (a== 1 && a ==2 && a==3) menilai kepada benar dalam JavaScript dengan mencipta objek tersuai yang mengubah nilainya secara dinamik pada penukaran. Ini menunjukkan potensi untuk tingkah laku yang tidak dijangka apabila berurusan dengan nilai bukan primitif dalam JavaScript.

Atas ialah kandungan terperinci Bolehkah Kesamaan Longgar JavaScript (==) Pernah Menjadikan (a == 1 && a == 2 && a == 3) Benar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan