Nomor berapa pun, itu nomor. String terlihat seperti angka, itu angka. Segala sesuatu yang lain, berjalan NaN.
'a' => NaN
'1' => 1
1 => 1
javascript
beatak
sumber
sumber
'1a'
string? Dengan' 1'
satu? Dengan kata lain, mengapa metode paling umum untuk melakukan itu (Number(x)
danparseInt(x, 10)
) tidak cukup bagi Anda?Jawaban:
Ada 4 cara untuk melakukannya sejauh yang saya tahu.
Dengan tes cepat yang saya buat ini, sebenarnya tergantung pada browser.
http://jsperf.com/best-of-string-to-number-conversion/2
Implicit
menandai yang tercepat di 3 browser, tetapi itu membuat kode sulit dibaca ... Jadi, pilih apa pun yang Anda suka!sumber
1*
untuk konversi tanggal-ke-angka, yang mirip dengan di+
atas. yaitu1*new Date()
daripada+new Date()
. Mungkin lebih mudah dibaca?1*
lebih disukai karena kurang rawan kesalahan. Variabel menggantung yang tidak diinginkan sebelumnya+1
bukanlah kesalahan parsing. Ini adalah trik yang mirip dengan penggunaanif (MYCONSTANT == myvar)
dalamC
.Setidaknya ada 5 cara untuk melakukan ini:
Jika Anda ingin mengonversi ke bilangan bulat saja, cara cepat (dan pendek) lainnya adalah tidak menggunakan bit -ganda (yaitu menggunakan dua karakter tilde):
misalnya
~~x;
Referensi: http://james.padolsey.com/cool-stuff/double-bitwise-not/
5 cara umum yang saya ketahui sejauh ini untuk mengonversi string menjadi angka semuanya memiliki perbedaan (ada lebih banyak operator bitwise yang berfungsi, tetapi semuanya memberikan hasil yang sama seperti
~~
). JSFiddle ini menunjukkan hasil berbeda yang dapat Anda harapkan di konsol debug: http://jsfiddle.net/TrueBlueAussie/j7x0q0e3/22/Konsol debug:
The
~~x
Hasil Versi di sejumlah di "lebih" kasus, di mana orang lain sering mengakibatkanundefined
, tapi gagal untuk input tidak valid (misalnya itu akan kembali0
jika string berisi karakter non-nomor setelah angka yang benar).Meluap
Harap dicatat: Integer overflow dan / atau bit truncation dapat terjadi dengan
~~
, tetapi tidak dengan konversi lainnya. Meskipun tidak biasa untuk memasukkan nilai sebesar itu, Anda perlu menyadari hal ini. Contoh diperbarui untuk menyertakan nilai yang jauh lebih besar.Beberapa tes Perf menunjukkan bahwa standar
parseInt
danparseFloat
fungsi sebenarnya adalah opsi tercepat, mungkin sangat dioptimalkan oleh browser, tetapi semuanya tergantung pada kebutuhan Anda karena semua opsi cukup cepat : http://jsperf.com/best-of-string-to -konversi-angka / 37Ini semua tergantung pada bagaimana tes kinerja dikonfigurasi karena beberapa menunjukkan parseInt / parseFloat menjadi jauh lebih lambat.
Teori saya adalah:
sumber
~~4294967296
return0
.Awali string dengan
+
operator.sumber
Cara cepat untuk mengubah string menjadi integer adalah dengan menggunakan bitwise atau, seperti ini:
Meskipun itu tergantung pada bagaimana penerapannya, dalam teori itu harus relatif cepat (setidaknya secepat
+x
) karena pertama-tama akan dilemparkanx
ke sebuah angka dan kemudian melakukan atau.sumber
Berikut adalah cara sederhana untuk melakukannya: var num = Number (str); dalam contoh ini str adalah variabel yang berisi string. Anda dapat menguji dan melihat cara kerjanya buka: Google chrome developer tools , kemudian pergi ke konsol dan paste kode berikut. baca komentar untuk lebih memahami bagaimana konversi dilakukan.
sumber
Saya merasa itu
num * 1
sederhana, jelas, dan berfungsi untuk integer dan float ...sumber
Ini mungkin tidak secepat itu, tetapi memiliki manfaat tambahan untuk memastikan nomor Anda setidaknya memiliki nilai tertentu (misalnya 0), atau paling banyak nilai tertentu:
Jika Anda perlu memastikan nilai minimum, biasanya Anda akan melakukannya
Math.max(..., 0)
menyelamatkan Anda dari menulis dua pernyataan.sumber
Math.abs(input)
? Ini juga mengubah string menjadi angka positif, dan menyimpan beberapa karakter tambahan.input
tidak dapat dikonversi ke nomor Anda akan mendapatkanNaN
Anda dapat mencoba menggunakan UnitOf , pustaka konversi pengukuran dan tipe data yang baru saja kami rilis secara resmi! UnitOf sangat cepat, berukuran kecil, dan efisien dalam mengonversi semua tipe data tanpa pernah menimbulkan kesalahan atau null / undefined. Nilai default yang Anda tentukan atau default UnitOf dikembalikan saat konversi tidak berhasil.
sumber
Cara tercepat adalah menggunakan -0:
sumber