Saat melakukan +, -, *, /, ==,! =, Dll. Dalam JavaScript, jika jenis nilai di kedua sisi operator tidak konsisten dengan jenis yang diharapkan, JavaScript akan mengonversi nilai di kedua sisi operator menjadi jenis yang diharapkan sebelum melakukan operasi. Ketika tipe nilai yang diharapkan adalah string, JavaScript akan mengonversi nilai menjadi string; Ketika tipe nilai yang diharapkan adalah angka, JavaScript akan mengonversi nilai menjadi angka (jika tidak dapat dikonversi ke nilai numerik, ia akan mengembalikan NAN). Misalnya:
Salinan kode adalah sebagai berikut:
Console.log (10 + "kucing"); // 10 kucing
Console.log (10 * "kucing"); // nan, "kucing" akan dikonversi menjadi NAN
Console.log (10 + "2"); // 102
Console.log (10 - "2"); // 8
Console.log (10/"2"); // 5
Console.log (10 * "2"); // 20
Console.log (10 * "2"); // 20
console.log ("10" * "2"); // 20
Aturan konversi jenis nilai
Untuk aturan konversi nilai di JavaScript, silakan merujuk ke Tabel 3-2. JavaScript Jenis Konversi dalam buku "JavaScript The Definitive Guide". Beberapa tempat yang lebih penting adalah:
1. Hasilnya adalah NAN setelah konversi yang tidak ditentukan menjadi nomor.
2. Hasilnya adalah 0 setelah mengonversi null menjadi nomor.
3. Hasilnya adalah 0 setelah mengonversi string kosong "" menjadi nomor.
4. Hasilnya adalah "0" setelah mengonversi-0 menjadi string.
5. Hasilnya adalah 0 setelah mengubah array kosong [] menjadi angka.
6. Array dengan hanya satu anggota angka (seperti [9]) dikonversi menjadi angka dan hasilnya adalah nilai angka (9).
Ketika JavaScript mengubah string menjadi nomor, ada dua aturan yang lebih menarik:
1. JavaScript akan menghapus karakter whitespace di awal dan akhir string sebelum mengonversinya, jadi string seperti "42" dapat berhasil dikonversi ke angka 42.
2. Setelah menghapus karakter whitespace di awal dan akhir, jika string masih berisi karakter non-numerik, string akan dikonversi ke NAN. Misalnya: "3 m" akan dikonversi ke NAN.
Contoh:
Salinan kode adalah sebagai berikut:
Console.log (10 * "3"); // 30
Console.log (10 * "3 m"); // nan, "3 m" akan dikonversi menjadi NAN
Konversi dan perbandingan tipe nilai
Dalam JavaScript, penggunaan operator yang sama (==) melibatkan konversi tipe nilai: Jika jenis nilai di kedua sisi operator == tidak konsisten, maka JS akan mengubahnya menjadi tipe yang konsisten sebelum membuat penilaian. Hati -hati bahwa dua jenis nilai yang berbeda mungkin setara setelah konversi tipe, tetapi ini tidak berarti bahwa hasil menggunakan operator == untuk mereka harus benar. Contoh sederhana tidak terdefinisi dan salah: hasil dari tidak terdefinisi setelah mengonversi tidak terdefinisi ke tipe boolean benar -benar salah, tetapi sebenarnya hasil dari tidak terdefinisi == false false.
Konversi Jenis Eksplisit
Konversi tipe otomatis menggunakan JavaScript sangat nyaman, tetapi dapat dengan mudah menyebabkan masalah seperti pemeliharaan kode. Untuk membuat kode program lebih jelas dan lebih sedikit ambiguitas, konversi jenis eksplisit terkadang digunakan dalam program JS:
Salinan kode adalah sebagai berikut:
Angka ("3") // 3
String (false) // "false"
Boolean ([]) // Benar
Dalam kebanyakan kasus, hasil konversi jenis eksplisit konsisten dengan hasil konversi tipe otomatis JS; Tetapi ada kasus khusus: ketika nol atau tidak terdefinisi secara otomatis dikonversi menjadi objek, JS akan melempar kesalahan TypeError; Tetapi ketika nol atau tidak terdefinisi secara eksplisit dikonversi menjadi objek, JS akan mengembalikan objek kosong:
Salinan kode adalah sebagai berikut:
console.log (objek (tidak terdefinisi)); // objek kosong
console.log (objek (null)); // objek kosong
Pada saat yang sama, jika jenis yang ditentukan oleh konversi eksplisit berbeda dari jenis yang ditentukan oleh konversi otomatis JS, hasil yang diperoleh juga berbeda. Misalnya, hasil dari tidak terdefinisi == FALSE yang disebutkan sebelumnya salah; Jika jenis konversi secara eksplisit ditentukan sebagai boolean, hasilnya benar:
Salinan kode adalah sebagai berikut:
console.log (tidak terdefinisi == false); // false
console.log (boolean (tidak terdefinisi) == boolean (false)); // true
Penggunaan Konversi Jenis Otomatis
Dalam JS, konversi otomatis tipe nilai dapat digunakan untuk mencapai efek yang sama dengan konversi eksplisit melalui operator, seperti:
Salinan kode adalah sebagai berikut:
console.log (false + ""); // "false"
console.log (+false); // 0
Console.log (!! 3); // Benar