Ada tiga jenis dari lima metode untuk mengubah data menjadi angka di JS, antara lain:
•Paksaan, tipe data dasar JS diubah menjadi tipe yang sesuai (Nomor(v)) dengan cara ini
•Fungsi asli, kedua fungsi ini memiliki hasil yang berbeda (parseInt(v,radix), parseFloat(v))
•Konversi implisit, JS akan mengonversi variabel ke tipe yang sesuai (perhitungan bit, perhitungan matematis) selama eksekusi
Nilai asli yang dikonversi juga dapat dengan mudah dibagi menjadi tiga kategori: objek, nilai khusus, dan string.
Nilai khusus di JS antara lain sebagai berikut.
•undefinisi, tidak terdefinisi, ketika suatu variabel dideklarasikan tetapi tidak diberi nilai atau nilai atribut yang tidak ada pada suatu objek adalah ini.
•NaN/Infinity, ini adalah dua "bilangan" keras kepala (typeof == number), yang masing-masing mewakili bilangan non-bilangan dan bilangan tak terhingga. Tampaknya tidak ada gunanya. Jika konversi ke angka gagal, nilai yang dikembalikan pada dasarnya adalah NaN.
•null, digunakan sebagai objek dengan nilai nol (typeof == objek).
•benar/salah, nilai Boolean, mewakili benar atau salah, setara dengan 1/0.
Untuk string juga dapat dibagi lagi berdasarkan konten. Menurut ekspresi numerik JS, mereka dapat dibagi menjadi legal dan ilegal. Ada beberapa cara berbeda untuk mengklasifikasikan bilangan resmi:
•Tanda: tanda positif, tanda negatif, tidak bertanda tangan
•Basis: oktal, desimal, heksadesimal
•Notasi ilmiah
•Desimal, bilangan bulat, dan singkatan desimal
Berdasarkan klasifikasi di atas, saya membuat Demo untuk menguji hasil berbagai metode dan konversi numerik. Tangkapan layar di bawah adalah konversi di bawah chrome.
Dilihat dari hasilnya, hanya perhitungan bit yang dapat mengubah nilai berapapun menjadi bilangan berhingga (isFinite). Hasil perhitungan matematis dan konversi paksa adalah sama.
Konversi nilai khusus berkaitan dengan nilai asli dan metode konversi. Semua konversi parseInt/parseFloat gagal dan mengembalikan NaN.
•NaN/undefinisi dikonversi ke NaN dengan metode lain;
•Infinity dikonversi ke NaN oleh parseInt, dan metode lainnya tidak mengubah nilainya;
•null/false/true tidak dapat dikonversi dengan parseInt/parseFloat dan mengembalikan NaN.
Analisis konversi string terutama bergantung pada metode konversi, tetapi semua metode tidak mendukung bilangan yang diwakili oleh oktal, tetapi diperlakukan sebagai bilangan desimal yang sesuai.
• Perhitungan logis mengkonversi ekspresi hukum kecuali angka heksadesimal negatif dan membuang bagian desimal yang menghasilkan nol;
•Perhitungan matematis/Angka mirip dengan perhitungan logis, tetapi tidak membulatkan desimal; ekspresi ilegal selain string kosong akan mengembalikan NaN.
•parseInt juga hanya mempertahankan bagian bilangan bulat; tetapi untuk ekspresi ilegal, ia mengambil bagian bilangan bulat legal (desimal, heksadesimal, tidak termasuk notasi ilmiah) di depan string dan mengonversinya, jika tidak, ia akan mengembalikan NaN.
•parseFloat mirip dengan parseInt, hanya saja parseInt dapat mengenali dan mempertahankan bagian desimal dan tidak mendukung bilangan heksadesimal.