Artikel ini akan berkongsi dengan anda soalan temu duga klasik untuk melihat cara untuk membuat "a==1&&a==2&&a==3" benar? Melalui soalan temu bual ini, saya mempelajari perkara-perkara yang terkandung di dalamnya. Saya harap ia dapat membantu semua orang!
if (a == 1 && a == 2 && a == 3) { console.log('Win') }
Cara memasukkan kod jika dilaksanakan dan berjaya mencetaknya pada konsol Win
?
Apabila saya mula-mula melihat soalan itu, saya menjadi buta Bagaimana keadaan yang bercanggah itu boleh berlaku? masa. Di manakah orang?
Ia tidak mengatakan biarkan a sama dengan 1 2 3 pada masa yang sama.
Dan js dijalankan dalam satu urutan. Walaupun ia ditulis pada satu baris, ia dilaksanakan dari kiri ke kanan Jadi ia bukan dari tempoh masa dan ruang yang sama.Oleh kerana mereka bukan dari tempoh yang sama, maka sudah tentu seseorang itu boleh menjadi kanak-kanak, kemudian dewasa, dan kemudian orang tua.
Berbalik kepada soalan, jika saya mahu syarat ini benar, saya perlu mendapatkan sekali dan biarkan ia meningkat 1 pada masa yang sama.
2. Penyelesaian
toString
Jalankannya sekali, tambah 1 pada _a, dan kemudian kembali.Oleh kerana toString ialah kaedah lalai di atas
const a = { _a: 0, toString: function() { return ++a._a } }
Mata pengetahuan yang melibatkan prototaip dan rantai prototaipObject.prototype
toString
. PakejSesetengah rakan di ruangan komen mengatakan bahawa tetapan a = true juga boleh menyelesaikan masalah. Sungguh sangat mengelirukan. Malah, ia mengelirukan keutamaan penukaran tersirat. Ringkasnya, penukaran tersirat terdiri daripada dua bahagian:
Peraturan penukaran + Syarat yang mencetuskan penukaran
mencetuskan peraturan penukaran
secara keseluruhan dan rentetan di sebelah kanan mencetuskan peraturan penukaran . if
Berbalik kepada soalan ini, sebelah kanan Boolean()
ialah nombor dan garisan larian JS adalah dari kiri ke kanan. Oleh itu, apa yang dicetuskan pada masa ini ialah peraturan ==
Selepas menukarkan toString()
di sebelah kiri kepada
s adalah sama dengan ==
, secara semula jadi tiada lagi peraturan. akan dicetuskan Pada masa ini Ia tidak lagi membentuk penukaran tersirat. Jadi Number()
tidak benar. true
1
Saya mengingatinya sekarang, dan ia akan lebih baik daripada menghafalnya semasa temu duga 1 == 1 && 1 == 2 && 1 == 3
tiga Apa yang perlu saya lakukan jika saya menungguSemua orang tahu bahawa?
menentukan jenis dahulu dan kemudian nilainya. di sini telah menukar objek kepada rentetan secara lalai Jika anda menggunakan , hasilnya tidak akan benar
===
2.2 definePropertiestoString
toStirng
Object.defineProperties(window, { _a: { value: 0, writable: true }, a: { get: function() { return ++_a } } })
3. RingkasanSama ada anda boleh buat soalan temuduga ini atau tidak tiada maknanya. Tetapi sangat menarik untuk memahami titik-titik pengetahuan yang terkandung dalam soalan temu bual ini.
Tutorial JavaScript Lanjutan
]Atas ialah kandungan terperinci Soalan temu bual: Bagaimana untuk menjadikan 'a==1&&a==2&&a==3' benar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!