Ignacio Vazquez-Abrams benar, tetapi mari kita lihat bagaimana cara kerjanya ...
Dari 15.1.2.2 parseInt (string , radix)
:
Ketika fungsi parseInt dipanggil, langkah-langkah berikut diambil:
- Biarkan inputString menjadi ToString (string).
- Biarkan S menjadi substring yang baru dibuat dari inputString yang terdiri dari karakter pertama yang bukan StrWhiteSpaceChar dan semua karakter yang mengikuti karakter itu. (Dengan kata lain, hapus spasi putih terdepan.)
- Biarkan tanda menjadi 1.
- Jika S tidak kosong dan karakter pertama S adalah tanda minus -, beri tanda −1.
- Jika S tidak kosong dan karakter pertama S adalah tanda plus + atau tanda minus -, maka hapus karakter pertama dari S.
- Misalkan R = ToInt32 (radix).
- Biarkan stripPrefix menjadi benar.
- Jika R ≠ 0, maka a. Jika R <2 atau R> 36, maka kembalikan NaN. b. Jika R ≠ 16, biarkan stripPrefix salah.
- Lain, R = 0 a. Misalkan R = 10.
- Jika stripPrefix benar, maka a. Jika panjang S setidaknya 2 dan dua karakter pertama S adalah "0x" atau "0X", maka hapus dua karakter pertama dari S dan biarkan R = 16.
- Jika S mengandung karakter apa pun yang bukan digit radix-R, maka misalkan Z adalah substring S yang terdiri dari semua karakter sebelum karakter pertama seperti itu; jika tidak, biarkan Z menjadi S.
- Jika Z kosong, kembalikan NaN.
- Biarkan mathInt menjadi nilai integer matematis yang diwakili oleh Z dalam notasi radix-R, menggunakan huruf AZ dan az untuk digit dengan nilai 10 hingga 35. (Namun, jika R adalah 10 dan Z berisi lebih dari 20 digit signifikan, setiap signifikan digit setelah tanggal 20 dapat diganti dengan angka 0, pada opsi implementasi, dan jika R bukan 2, 4, 8, 10, 16, atau 32, maka mathInt mungkin merupakan pendekatan yang bergantung pada implementasi terhadap bilangan bulat matematika nilai yang diwakili oleh Z dalam notasi radix-R.)
- Biarkan angka menjadi nilai Angka untuk mathInt.
- Kembali tanda × angka.
CATATAN parseInt hanya dapat menginterpretasikan bagian terdepan dari string sebagai nilai integer; ia mengabaikan karakter apa pun yang tidak dapat ditafsirkan sebagai bagian dari notasi bilangan bulat, dan tidak ada indikasi yang diberikan bahwa karakter tersebut diabaikan.
Ada dua bagian penting di sini. Saya berani keduanya. Jadi pertama-tama, kita harus mencari tahu apa toString
representasi null
itu. Kita perlu melihat Table 13 — ToString Conversions
di bagian 9.8.0 untuk informasi itu:
Hebat, jadi sekarang kita tahu bahwa melakukan secara toString(null)
internal menghasilkan 'null'
string. Hebat, tapi bagaimana tepatnya menangani digit (karakter) yang tidak valid dalam radix yang disediakan?
Kami melihat ke atas 15.1.2.2
dan kami melihat komentar berikut:
Jika S mengandung karakter apa pun yang bukan digit radix-R, maka misalkan Z adalah substring S yang terdiri dari semua karakter sebelum karakter pertama seperti itu; jika tidak, biarkan Z menjadi S.
Itu berarti bahwa kami menangani semua digit SEBELUM dengan radix yang ditentukan dan mengabaikan yang lainnya.
Pada dasarnya, melakukan parseInt(null, 23)
adalah hal yang sama dengan parseInt('null', 23)
. The u
menyebabkan dua l
's untuk diabaikan (meskipun mereka ADALAH bagian dari radix 23). Karena itu, kami hanya dapat menguraikan n
, menjadikan seluruh pernyataan sama dengan parseInt('n', 23)
. :)
Either way, pertanyaan bagus!