Selama proses aplikasi JavaScript, kami akan menemukan berbagai perbandingan. Hari ini, saya telah menyusun tiga situasi untuk Anda dan mempelajarinya bersama.
1. Perbandingan dua objek
Perbandingan JavaScript dicampur dengan beberapa fitur aneh, mari kita lihat beberapa perbandingan sederhana.
// Perbandingan Nilai Mentah> Var A = 12undefined> var b = 12undefined> a == btrue> a === Btrue // Perbandingan objek> var c = [] tidak terdefinisi> var d = [] tidak terdefinisi> c == dfalse> c === DFALSE
Dari hasil di atas, kita dapat melihat bahwa membandingkan dua nilai asli tampaknya sedikit berbeda dari membandingkan objek. Jika Anda membandingkan nilai dua objek, bahkan jika nilainya sama, hasil akhirnya berbeda. Saat membandingkan dua objek, referensi kedua objek harus dibandingkan.
Jika kita melakukan ini:
> var m = {} tidak terdefinisi> n = m {}> n === mtrueIni berarti bahwa kedua variabel menunjuk ke objek yang sama, sehingga mereka sama.
2. Perbandingan berbagai jenis
Ada juga situasi khusus berikut
> 12 == "12" true> null == UndefinedTrue> Undefined == falseFalse> null == falseFalse> null === tidak terdefinfinedfalse
Mengapa bilangan bulat bisa sama dengan string? Ini karena == (sama dengan, bukan kongruen) tidak membandingkan jenis. Sebelum membandingkan, itu akan mengetik nilai yang perlu dibandingkan. Di sini, string akan dikonversi ke tipe numerik dan kemudian dibandingkan . Kenapa begitu yakin? Mari kita lakukan beberapa percobaan.
> 1 + 23> 1 + "2" '12'> 2 <"12" true> "2" <"12" false
Dari contoh di atas, kita dapat melihat bahwa nilai 2 memang lebih kecil dari string 12. Jika perbandingan dikonversi menjadi string sebelum nilai dikonversi menjadi string, hasilnya harus "2"> "12".
Belum percaya? Izinkan saya memberi Anda contoh lain.
> "12d"> 12false> "12d" <12false> "12d" == 12false> "12" <"12d" true
Mengapa ini? Jika Anda mengonversi 12 menjadi string, maka 12D harus lebih besar dari 12, kan? Mengapa Anda membandingkannya dengan False? Saya kira itu karena pria spesial di bawah ini.
> Nan <1false> nan> 1false
Tidak peduli apa yang Nan perbandingan, itu akan mengembalikan false. Termasuk dirinya sendiri. Oleh karena itu, cara terbaik untuk menentukan apakah suatu variabel adalah nan adalah x! = X Jika yang dikembalikan benar, itu berarti bahwa x adalah nan . Maka di sini seharusnya ketika 12D harus dikonversi menjadi tipe numerik karena memiliki karakter khusus dan akhirnya menjadi NAN. Tidak peduli bagaimana Anda membandingkannya dengan tipe numerik, hasilnya salah.
Untuk operator numerik dan string, operator tanda plus berperilaku berbeda dari operator perbandingan. Operator Plus lebih memilih string, dan jika salah satu operan adalah string, itu akan dikonversi menjadi string. Operator perbandingan lebih suka angka, dan perbandingan string hanya akan dilakukan ketika kedua angka adalah string.
Adapun nol dan tidak terdefinisi di atas. . . . . Saya tidak tahu bagaimana menjelaskan perilaku mereka untuk saat ini. Saya hanya bisa mengingatnya untuk saat ini. Karena mereka istimewa.
3. Perbandingan objek dengan nilai asli
Jika dua objek yang perlu dibandingkan adalah objek dan kerangka JavaScript, tingkat konversi jenis tertentu akan dilakukan. Temukan cara untuk mengubah nilai objek menjadi nilai asli. Secara umum, ada dua metode valueOf, toString . Berikut ini adalah proses konversi objek kosong:
// Saya menulisnya secara langsung> a = {} {} // 1. Nilai konversi> a.valueof () {} // 2. Jika operasi di atas menghasilkan nilai mentah, maka gunakan ToString untuk mengonversi. (Dan sebaliknya)> a.tostring () '[objek objek]'> a == '[objek objek]' true Di atas sebenarnya adalah proses konversi objek bawaan dan mekanisme JavaScript. Pertama akan menghubungi valueOf untuk konversi. Jika nilai yang diperoleh bukan nilai primitif, maka maka akan memanggil toString untuk konversi. Nilai akhir adalah '[object Object]' nilai yang sangat aneh, tetapi itu adalah nilai aslinya. Jika variabel A dan nilai ini sama (tidak kongruen), hasil yang benar dapat diperoleh. (Apakah itu runtuh?)
Namun, panduan otoritatif memberikan prinsip -prinsip berikut, kita dapat merujuknya.
Konversi nilai-nilai mentah kelas bawaan bahasa javascript pertama kali coba konversi dengan ValueO f, dan kemudian gunakan toString untuk konversi. Kecuali untuk kelas tanggal, itu hanya menggunakan toString untuk konversi. Objek yang tidak ada dalam inti JavaScript dikonversi ke nilai -nilai asli melalui cara mereka didefinisikan dalam implementasi masing -masing.
Menurut penjelasan di atas. Ketika kita membandingkan a = {} dengan nilai asli, kita akan memanggil valueOf fungsi terlebih dahulu, dan hasilnya adalah {} jelas bukan nilai primitif. Maka konversi akan dilakukan dengan menggunakan toString . Akhirnya, hasil aneh itu keluar. Tapi hasil aneh ini '[object Object]' memang nilai asli {}. (Ini adalah literal dari suatu string).
Di atas adalah ringkasan komparatif dalam JavaScript. Saya berharap deskripsi dalam artikel ini akan bermanfaat bagi semua orang saat mempelajari JavaScript.