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/
var values = ["123",
undefined,
"not a number",
"123.45",
"1234 error",
"2147483648",
"4999999999"
];
for (var i = 0; i < values.length; i++){
var x = values[i];
console.log(x);
console.log(" Number(x) = " + Number(x));
console.log(" parseInt(x, 10) = " + parseInt(x, 10));
console.log(" parseFloat(x) = " + parseFloat(x));
console.log(" +x = " + +x);
console.log(" ~~x = " + ~~x);
}
Konsol debug:
123
Number(x) = 123
parseInt(x, 10) = 123
parseFloat(x) = 123
+x = 123
~~x = 123
undefined
Number(x) = NaN
parseInt(x, 10) = NaN
parseFloat(x) = NaN
+x = NaN
~~x = 0
null
Number(x) = 0
parseInt(x, 10) = NaN
parseFloat(x) = NaN
+x = 0
~~x = 0
"not a number"
Number(x) = NaN
parseInt(x, 10) = NaN
parseFloat(x) = NaN
+x = NaN
~~x = 0
123.45
Number(x) = 123.45
parseInt(x, 10) = 123
parseFloat(x) = 123.45
+x = 123.45
~~x = 123
1234 error
Number(x) = NaN
parseInt(x, 10) = 1234
parseFloat(x) = 1234
+x = NaN
~~x = 0
2147483648
Number(x) = 2147483648
parseInt(x, 10) = 2147483648
parseFloat(x) = 2147483648
+x = 2147483648
~~x = -2147483648
4999999999
Number(x) = 4999999999
parseInt(x, 10) = 4999999999
parseFloat(x) = 4999999999
+x = 4999999999
~~x = 705032703
The ~~xHasil Versi di sejumlah di "lebih" kasus, di mana orang lain sering mengakibatkan undefined, tapi gagal untuk input tidak valid (misalnya itu akan kembali 0jika 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 parseIntdan parseFloatfungsi 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 / 37
Ini semua tergantung pada bagaimana tes kinerja dikonfigurasi karena beberapa menunjukkan parseInt / parseFloat menjadi jauh lebih lambat.
Teori saya adalah:
- Kebohongan
- Garis sialan
- Statistik
- Hasil JSPerf :)