Rumah  >  Artikel  >  hujung hadapan web  >  Soalan temu bual: Bagaimana untuk menjadikan "a==1&&a==2&&a==3" benar?

Soalan temu bual: Bagaimana untuk menjadikan "a==1&&a==2&&a==3" benar?

青灯夜游
青灯夜游ke hadapan
2023-03-13 20:06:481598semak imbas

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!

Soalan temu bual: Bagaimana untuk menjadikan

1. Analisis masalah

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?

Soalan temu bual: Bagaimana untuk menjadikan 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.

Soalan temu bual: Bagaimana untuk menjadikan 2. Penyelesaian

2.1 toString

Kaedah pertama ialah menggunakan [penukaran tersirat dalam proses penghakiman ]' s

kaedah. Saya menghuraikan perkara ini dalam artikel saya yang lain Mengapa [] == ![] adalah benar .

toStringJalankannya sekali, tambah 1 pada _a, dan kemudian kembali.Oleh kerana toString ialah kaedah lalai di atas

, jadi kaedah ini bersamaan dengan penukaran tersirat biasa
const a = {
  _a: 0,
  toString: function() {
    return ++a._a
  }
}
kaedah dipintas.

Mata pengetahuan yang melibatkan prototaip dan rantai prototaipObject.prototypetoString

Masalah boleh diselesaikan.

Sesetengah 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
. Pakej

mencetuskan peraturan penukaran

secara keseluruhan dan rentetan

di sebelah kanan mencetuskan peraturan penukaran . ifBerbalik 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

dan jenis kedua-dua

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. true1Saya mengingatinya sekarang, dan ia akan lebih baik daripada menghafalnya semasa temu duga 1 == 1 && 1 == 2 && 1 == 3

Sekarang ubah suai soalan, tukar dua kali ganda kepada
tiga Apa yang perlu saya lakukan jika saya menunggu

?

Semua 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 definePropertiestoStringtoStirng

Gunakan. data kaedah Pemintasan objek:

Melibatkan kandungan berkaitan pengakses objek

Saya tertanya-tanya adakah ia mengingatkan anda tentang jam tangan atau arahan yang dikira dalam Vue?
Object.defineProperties(window, {
  _a: {
    value: 0,
    writable: true
  },
  a: {
    get: function() {
      return  ++_a
    }
  }
})

3. Ringkasan

Sama 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.

Daripada penukaran jenis tersirat kepada prototaip dan rantaian prototaip, dan akhirnya kepada sifat hak akses objek. Jika anda ingin terus melanjutkan, prinsip pelaksanaan pengikatan dua hala Vue, pelaksanaan statik dalam kelas, dsb.

Inilah sebabnya mengapa perlu membina sistem pengetahuan bahagian hadapan yang boleh meluas dari satu titik pengetahuan ke titik pengetahuan lain yang berkaitan.

[Pembelajaran yang disyorkan:

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!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam