Saya memiliki masalah yang mengganggu dalam JavaScript .
> parseInt(1 / 0, 19)
> 18
Mengapa parseInt
fungsinya kembali 18
?
javascript
parseint
cebor
sumber
sumber
if
mungkin dapat membantu.Jawaban:
Hasilnya
1/0
adalahInfinity
.parseInt
memperlakukan argumen pertamanya sebagai string yang artinya pertama-tamaInfinity.toString()
disebut, menghasilkan string"Infinity"
. Jadi kerjanya sama seperti jika Anda memintanya untuk mengonversi"Infinity"
dalam basis 19 ke desimal.Berikut adalah angka dalam basis 19 bersama dengan nilai desimalnya:
Apa yang terjadi selanjutnya adalah
parseInt
memindai input"Infinity"
untuk menemukan bagian mana yang dapat diuraikan dan berhenti setelah menerima yang pertamaI
(karenan
bukan digit yang valid pada basis 19).Oleh karena itu berperilaku seolah-olah Anda menelepon
parseInt("I", 19)
, yang dikonversi ke desimal 18 oleh tabel di atas.sumber
parseInt('Infini',24)
.n
juga merupakan digit yang valid, jadi itu benar-benar berakhirparseInt("Infini", 24)
.Berikut urutan acara:
1/0
mengevaluasi keInfinity
parseInt
membacaInfinity
dan dengan senang hati mencatat bahwaI
18 di basis 19parseInt
mengabaikan sisa string, karena tidak dapat dikonversi.Perhatikan bahwa Anda akan mendapatkan hasil untuk basis apa pun
>= 19
, tetapi tidak untuk basis di bawahnya. Untuk basis>= 24
, Anda akan mendapatkan hasil yang lebih besar, karenan
menjadi digit yang valid pada saat itu.sumber
parseInt
akan menerima adalah 36, karena ada 26 huruf dalam alfabet bahasa Inggris, dan konvensi adalah menggunakan digit lalu huruf sebagai himpunan digit yang valid di basis yang diberikan.Infinity
ke"Infinity"
...Untuk menambah jawaban di atas:
parseInt dimaksudkan untuk mengurai string menjadi angka (petunjuknya ada pada nama). Dalam situasi Anda, Anda tidak ingin melakukan parsing sama sekali karena 1/0 sudah menjadi angka, jadi ini adalah pilihan fungsi yang aneh. Jika Anda memiliki nomor (yang Anda lakukan) dan ingin mengubahnya menjadi basis tertentu, Anda harus menggunakan toString dengan radix sebagai gantinya.
sumber
Untuk menambah jawaban di atas
parseInt(1/0,19)
setara denganparseInt("Infinity",19)
Dalam basis 19 angka
0-9
danA-I
(or a-i)
merupakan angka yang valid. Jadi, dari "Infinity" dibutuhkanI
dari basis 19 dan dikonversi ke basis 10 yang menjadi 18 Kemudian ia mencoba untuk mengambil karakter berikutnya yaitun
yang tidak ada di basis 19 sehingga membuang karakter berikutnya (sesuai perilaku javascript mengubah string ke angka )Jadi, jika Anda menulis
parseInt("Infinity",19)
ATAUparseInt("I",19)
ATAUparseInt("i",19)
hasilnya akan sama yaitu18
.Sekarang, jika Anda menulis
parseInt("I0",19)
hasilnya akan342
sepertiI X 19 (the base)^1 + 0 X 19^0
=18 X 19^1 + 0 X 19^0
=18 X 19 + 0 X 1
=342
Demikian pula,
parseInt("I11",19)
akan menghasilkan6518
yaitu
sumber