Coba jalankan yang berikut dalam JavaScript:
parseInt('01'); //equals 1
parseInt('02'); //equals 2
parseInt('03'); //equals 3
parseInt('04'); //equals 4
parseInt('05'); //equals 5
parseInt('06'); //equals 6
parseInt('07'); //equals 7
parseInt('08'); //equals 0 !!
parseInt('09'); //equals 0 !!
Saya baru belajar dengan susah payah bahwa JavaScript menganggap nol di depan menunjukkan integer oktal , dan karena tidak ada "8"
atau "9"
di basis-8, fungsi mengembalikan nol. Suka atau tidak, ini sesuai desain .
Apa solusinya?
Catatan: Demi kelengkapan, saya akan memposting solusi, tapi ini solusi yang saya benci, jadi tolong posting jawaban lain / lebih baik.
Memperbarui:
Edisi 5 dari standar JavaScript ( ECMA-262 ) memperkenalkan perubahan besar yang menghilangkan perilaku ini. Mozilla memiliki yang baik write-up .
10
(desimal) kecuali angka yang diurai diawali dengan 0x
, misalnya 0xFF
, dalam hal ini parameter dasar default ke 16. Mudah-mudahan, suatu hari, masalah ini akan menjadi memori yang jauh.
+'08' === 8
? Benar! Mungkin Anda benar-benar membutuhkan parseInt
kode asli Anda, tetapi tidak untuk yang di atas.
Number('08')
0
atau undefined
dan nomor string dimulai dengan 0
digit yang tidak diikuti oleh x
atau X
, maka implementasinya dapat, dengan kebijakannya sendiri, menginterpretasikan angka tersebut sebagai oktal atau sebagai desimal. Implementasi didorong untuk menafsirkan angka dalam kasus ini sebagai desimal. " ( Penekanan saya)