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 parseIntkode asli Anda, tetapi tidak untuk yang di atas.
Number('08')
0atau undefineddan nomor string dimulai dengan 0digit yang tidak diikuti oleh xatau 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)