Selama proses penulisan program JavaScript, JS akan secara otomatis mengubah objek menjadi angka atau string dan kemudian memprosesnya sesuai dengan konteks yang berbeda. Aturan untuk konversi otomatis ini adalah sebagai berikut:
Aturan untuk mengonversi objek secara otomatis menjadi string:
1. Jika objek milik kelas menimpa metode tostring (), metode ini dipanggil. Jika hasil pengembalian panggilan tostring () adalah primitif (string, angka, boolean, tidak terdefinisi, nol), nilai primitif dikonversi menjadi string dan dikembalikan.
2. Jika metode ToString () tidak ditimpa oleh kelas ToString (), hasil pengembalian dari panggilan tostring () adalah "[objek objek]"; atau metode tostring () ditimpa tetapi metode mengembalikan hasilnya sebagai objek. Maka JS akan memanggil metode Nilai Objek (). Jika hasil pengembalian dari panggilan () panggilan primitif (string, angka, boolean, tidak terdefinisi, nol), kemudian konversi nilai primitif menjadi string dan pengembalian.
3. Jika tidak satu pun dari titik -titik di atas dipenuhi dan nilai primitif tidak dapat diperoleh dengan memanggil metode ToString () objek atau nilai metode (), maka JS akan melempar kesalahan TypeError.
Aturan untuk mengonversi objek secara otomatis menjadi nomor:
1. Panggil metode () metode objek. Jika nilai primitif diperoleh, konversi nilai primitif menjadi angka dan kembalikan.
2. Jika nilai primitif tidak dapat diperoleh dari metode nilai (), maka panggil metode objek tostring (); Jika tostring () mengembalikan nilai primitif, maka konversi nilai primitif menjadi angka dan pengembalian.
3. Jika tidak satu pun dari dua poin di atas tidak dapat dipenuhi, JS akan melempar kesalahan TypeError.
Dapat dilihat bahwa aturan untuk mengonversi objek secara otomatis menjadi string dan objek ke angka sebenarnya sama. Perbedaannya adalah metode Call ToString () metode dan nilai metode ().
Menurut aturan di atas, beberapa hasil konversi dapat dipahami dengan baik:
1. Untuk array kosong, saat mengubahnya menjadi nomor, hasilnya adalah 0. Ini karena nilai metode array () akan dipanggil terlebih dahulu. Karena valueOf () mengembalikan objek array itu sendiri, JS selanjutnya akan memanggil metode tostring () dari array kosong; Karena hasil dari array kosong tostring () kembali ke string kosong, string kosong pada akhirnya akan dikonversi ke angka 0 dan dikembalikan.
2. Untuk array dengan hanya satu anggota angka, terapkan aturan yang sama untuk mengubahnya menjadi angka, dan hasil akhirnya adalah angkanya.
3. Untuk array dengan beberapa anggota numerik, karena string tidak dapat dikonversi menjadi angka, hasil akhirnya adalah NAN.
Kapan harus dikonversi ke string? Kapan harus dikonversi ke nomor?
Saat melakukan konversi tipe otomatis pada suatu objek, JS akan memilih untuk mengonversinya menjadi string atau angka tergantung pada jenis objek dan operator. Aturan spesifiknya adalah sebagai berikut:
1. Jika suatu objek muncul di kedua sisi operator +, ubah objek menjadi string.
2. Semua objek (kecuali objek tanggal) akan dikonversi ke angka terlebih dahulu.
3. Untuk objek tanggal, prioritas dikonversi menjadi string.
Perlu dicatat bahwa untuk operator +, kecuali untuk kasus di mana objek atau string muncul di kedua sisi operator, pengoperasian "Convert to Number" dilakukan dalam kasus lain. Pada saat yang sama, operasi ini juga terkait dengan urutan antara nilai.
percobaan
Salinan kode adalah sebagai berikut:
Console.log (3 * []); // 0
Console.log (3 * [2]); // 6
console.log (3 * [1,2]); // nan
Console.log (3 + [2]); // 32
var sekarang = tanggal baru ();
Console.log (sekarang + 1); // Rab 26 Mar 2014 10:51:39 GMT + 0800 (CST) 1
Console.log (sekarang - 1); // 1395802299223
Console.log (sekarang * 2); // 2791604598448
console.log (true + true); // 2
console.log (2 + null); // 2, null dikonversi menjadi 0
console.log (2 + tidak terdefinisi); // nan, tidak ditentukan dikonversi menjadi NAN
Console.log (1 + 2 + "kucing"); // 3 kucing
console.log (1 + (2 + "kucing")); // 12 kucing