Perkenalan
Jika pernyataan harus menjadi pernyataan yang digunakan programmer lebih sering, dan seringkali mereka perlu membuat jika penilaian. Jika pernyataan umumnya menggunakan tanda -tanda ganda untuk menentukan apakah dua elemen sebelum dan sesudahnya konsisten. Jika mereka konsisten, maka pengembalian itu benar dan kemudian jalankan pernyataan berikut. Jika tidak, jalankan pernyataan lain. Konversi tipe implisit yang disebutkan dalam artikel ini mengacu pada konversi yang disebabkan oleh ==. Untuk memberikan contoh sederhana, tanda ganda yang sama bukan tanda total yang sama, tanda total yang sama adalah "===" Tiga tanda yang sama, dan pernyataan "1" == 1, kemudian secara umum, string sebelumnya "1" dikonversi menjadi angka 1 dan kemudian dibandingkan. Melalui contoh ini, Anda harus memahami apa itu konversi tipe implisit!
Langkah konversi tipe implisit
1. Pertama, periksa apakah ada Nan sebelum dan sesudah tanda ganda sama. Jika Nan ada, semua kembali salah.
2. Mari kita lihat apakah ada boolean sebelum dan sesudah tanda ganda sama. Jika ada boolean, ubah boolean menjadi angka. (Salah adalah 0, benar adalah 1)
3. Kemudian periksa apakah ada string sebelum dan sesudah tanda ganda sama. Ada tiga situasi:
1. Pihak lain adalah objek, dan objek dikonversi menggunakan tostring () atau valueOf ();
2. Pihak lain adalah angka, dan string dikonversi menjadi angka; (Contoh telah diberikan sebelumnya)
3. Pihak lain adalah string, bandingkan secara langsung;
4. Lainnya kembali salah
4. Jika itu angka, pihak lain adalah objek. Objek mengambil nilai () atau tostring () untuk perbandingan, dan semua objek lain akan mengembalikan false.
5. NULL, tidak terdefinisi tidak akan melakukan konversi tipe, tetapi mereka sama
Urutan konversi di atas harus diingat. Jenis pertanyaan sering terjadi selama wawancara.
konversi numerik dari metode .tostring () dan metode .valueof ()
Biasanya, kami berpikir bahwa mengubah objek menjadi string memerlukan memanggil metode tostring (), dan mengubahnya menjadi angka membutuhkan panggilan nilai dari metode (), tetapi tidak sesederhana itu ketika sebenarnya diterapkan. Lihat contoh kode berikut:
var obj = {webname: "haorooms front-end blog", url: "www.vevb.com"} console.log (obj.tostring ()); // [objek objek]Demikian pula, mari kita lihat metode nilai () lagi:
var arr = [1, 2, 3]; console.log (arr.valueof ()); // [1, 2, 3]
Seperti yang dapat dilihat dari kode di atas, metode ValueOf () tidak mengonversi objek ke angka yang mencerminkan objek. Sebaliknya, kami menggunakan tostring ()
var arr = [1, 2, 3]; console.log (arr.tostring ()); // 1,2,3
Catatan: Banyak teman percaya bahwa ketika mengonversi ke string, Anda harus terlebih dahulu memanggil metode tostring (). Bahkan, ini adalah pemahaman yang salah. Kita harus memahami cara ini. Memanggil metode tostring () dapat dikonversi ke string, tetapi tidak berarti bahwa mengonversi string adalah dengan memanggil metode tostring () terlebih dahulu.
Mari kita lihat kode berikut:
var arr = {}; arr.valueof = function () {return 1; } arr.toString = function () {return 2; } console.log (arr == 1); // truevar arr = {}; arr.valueof = function () {return []; } arr.toString = function () {return 1; } console.log (arr == 1); // trueKita dapat melihat dari kode di atas bahwa panggilan pertama ke nilai () untuk konversi. Jika valueOf () bukan nilai numerik, tostring akan dipanggil untuk konversi!
var arr = {}; arr.valueof = function () {return "1"; } arr.toString = function () {return "2"; } console.log (arr == "1"); // trueJika "1" adalah string, maka hal pertama yang disebut nilai dari ().
var arr = [2]; console.log (arr + "1"); // 21
Dalam contoh di atas, tostring () dipanggil; karena arr.tostring () diikuti oleh 2.
Proses konversi seperti ini. Pertama, ARR akan memanggil metode nilai () terlebih dahulu, tetapi metode angka ini hanya diwariskan dan tidak ditulis ulang (tentu saja, penulisan ulang ini tidak diimplementasikan oleh kami). Nilai pengembalian adalah objek array itu sendiri, bukan tipe nilai, jadi kami memanggil metode tostring (), sehingga mencapai tujuan mengkonversi ke string.
ringkasan
Sebagian besar objek secara implisit dikonversi ke tipe nilai adalah upaya pertama untuk memanggil metode nilai (). Namun, objek tanggal adalah pengecualian. Nilai metode () dan tostring () dari objek ini telah ditulis ulang dengan cermat. Standarnya adalah memanggil metode ToString (), seperti menggunakan operator +. Jika berada di lingkungan operasi aritmatika lainnya, metode nilai () akan dipanggil sebagai gantinya.
var tanggal = tanggal baru (); console.log (tanggal + "1"); // Sun Apr 17 2014 17:54:48 GMT + 0800 (CST) 1Console.log (tanggal + 1); // 1460886888556Console.log (Tanggal * 1); // 1460888888557