Fungsi parseInt Javascript tampaknya tidak berfungsi sepenuhnya.
parseInt("01") returns 1
parseInt("02") returns 2
parseInt("03") returns 3
parseInt("04") returns 4
parseInt("05") returns 5
parseInt("06") returns 6
parseInt("07") returns 7
parseInt("08") returns 0
parseInt("09") returns 0
Anda tidak bisa menjelaskannya. Cobalah. (jsFiddle)
Sunting Sejak pertanyaan ini ditanyakan dan dijawab, "fitur" dari default ke oktal radix sudah tidak digunakan lagi. [ 1 ] [ 2 ]
javascript
penyelamat
sumber
sumber
You can't explain that.
Ya, Anda dapat => developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…Jawaban:
Ini karena jika sebuah bilangan dimulai dengan '0', itu diperlakukan sebagai basis 8 (oktal).
Anda dapat memaksa basis dengan melewatkan basis sebagai parameter ke-2.
Menurut dokumen , parameter kedua adalah opsional, tetapi tidak selalu dianggap 10, seperti yang Anda lihat dari contoh Anda.
sumber
11
di basis 8 ada9
di basis 10.09
bukan bilangan basis 8 yang valid.Panggilan ke
parseInt
harus selalu menentukan basis dalam argumen kedua:Versi JavaScript sebelumnya memperlakukan string yang dimulai dengan
0
oktal (bila tidak ada basis yang ditentukan) dan tidak08
juga09
bilangan oktal yang valid.Dari dokumentasi Mozilla :
Dan dari standar ECMAScript 3 :
Versi terbaru JavaScript ( ECMAScript 5 ) mengabaikan perilaku ini , tetapi Anda masih harus menentukan radix untuk memenuhi browser lama.
sumber
Ada parameter Radix
Dimana basis adalah radix.
Dalam hal ini Anda mengevaluasi bilangan basis10 (desimal), oleh karena itu gunakan
sumber
Ini sepertinya tidak sepenuhnya valid di browser baru. Internet Explorer 9 dan 10 akan mengembalikan 8 jika Anda menjalankan 'parseInt ("08")' sedangkan Internet Explorer 8 dan versi sebelumnya akan mengembalikan 0 (IE10 dalam mode quirks juga akan mengembalikan 0).
Chrome versi terbaru juga menampilkan 8 sehingga interpretasinya pasti telah berubah baru-baru ini.
sumber
Masalah ini sudah tidak berlaku lagi sekarang. Tetapi Anda masih dapat menggunakan radix in
parseInt
untuk mengubah jumlah basis lainnya menjadi basis 10. Misalnya,kembali
17
(yang merupakan basis 10 dari0010001
).sumber
Tip: Seperti yang sekarang Anda ketahui saat default ke oktal sudah tidak digunakan lagi. Berikut adalah cara Anda memperbaikinya di browser lama
sumber
Masalahnya sekarang tampaknya telah berubah di sebagian besar browser.
Firefox 51.0.1 (64-bit)
Chrome 55.0.2883.95 (64-bit)
Safari 10.0 (12602.1.50.0.10)
=====
Latihan yang Direkomendasikan
Karena itu, hanya untuk berada di sisi yang lebih aman dan menghindari masalah, gunakan parameter base / radix seperti yang disarankan dalam jawaban yang diterima .
Tes ekstra
Saya hanya ingin menguji ini juga, jika argumennya bukan string. Chrome & Safari memberikan hasil yang tepat. Firefox juga memberikan hasil yang tepat, tetapi dengan peringatan.
sumber