Ignacio Vazquez-Abrams doğru, ama tam olarak nasıl çalıştığını görelim ...
Gönderen 15.1.2.2 parseInt (string , radix)
:
ParseInt işlevi çağrıldığında aşağıdaki adımlar atılır:
- İnputString öğesinin ToString (string) olmasına izin verin.
- S, StrWhiteSpaceChar olmayan ilk karakterden ve bu karakteri izleyen tüm karakterlerden oluşan inputString'in yeni oluşturulan bir alt dizesi olsun. (Başka bir deyişle, önde gelen beyaz boşluğu kaldırın.)
- İşaret 1 olsun.
- S boş değilse ve S'nin ilk karakteri eksi işaretiyse - işareti −1 olsun.
- S boş değilse ve S'nin ilk karakteri artı işareti + veya eksi işareti - ise, ilk karakteri S'den kaldırın.
- R = ToInt32 (sayı tabanı) olsun.
- StripPrefix öğesinin true olmasına izin verin.
- R ≠ 0 ise, a. R2 veya R36 ise, NaN değerini döndürün. b. R ≠ 16 ise, stripPrefix öğesinin false olmasına izin verin.
- Else, R = 0 a. R = 10 olsun.
- StripPrefix doğruysa, a. S uzunluğu en az 2 ise ve S'nin ilk iki karakteri “0x” veya “0X” ise, ilk iki karakteri S'den kaldırın ve R = 16 olsun.
- S, sayı tabanı R karakteri olmayan herhangi bir karakter içeriyorsa, Z'nin bu tür ilk karakterden önceki tüm karakterlerden oluşan S'nin alt dizesi olmasına izin verin; Aksi takdirde, Z'nin S olmasına izin verin.
- Z boşsa, NaN'yi iade edin.
- 10 ila 35 arası değerlere sahip basamaklar için AZ ve az harflerini kullanarak, radix-R göstergesinde Z ile temsil edilen matematiksel tamsayı değeri olsun. (Ancak, R 10 ise ve Z, 20'den fazla önemli basamak içeriyorsa, 20'den sonraki rakam, uygulama seçeneğinde 0 rakamıyla değiştirilebilir ve R 2, 4, 8, 10, 16 veya 32 değilse, mathInt, matematiksel tamsayıya uygulamaya bağlı bir yaklaşım olabilir. radix-R gösterimlerinde Z ile temsil edilen değer.)
- Sayının mathInt için Number değeri olmasına izin verin.
- Dönüş işareti × sayı.
NOT parseInt, dizenin yalnızca önde gelen bir kısmını bir tamsayı değeri olarak yorumlayabilir; bir tamsayı gösteriminin bir parçası olarak yorumlanamayan karakterleri yok sayar ve bu karakterlerin yok sayıldığına dair herhangi bir işaret verilmez.
Burada iki önemli kısım var. İkisini de cüret ettim. Bu yüzden her şeyden önce, toString
temsilinin ne olduğunu bulmalıyız null
. Bu Table 13 — ToString Conversions
bilgi için bölüm 9.8.0'a bakmamız gerekir :
Harika, şimdi toString(null)
dahili olarak yapmanın bir 'null'
ip verdiğini biliyoruz . Harika, ancak sağlanan yarıçapta geçerli olmayan rakamları (karakterleri) tam olarak nasıl ele alıyor?
Yukarıya bakarız 15.1.2.2
ve aşağıdaki ifadeyi görürüz:
S, sayı tabanı R karakteri olmayan herhangi bir karakter içeriyorsa, Z'nin bu tür ilk karakterden önceki tüm karakterlerden oluşan S'nin alt dizesi olmasına izin verin; Aksi takdirde, Z'nin S olmasına izin verin.
Bu, tüm sayıları ÖNCE belirtilen sayıdaki çapa göre işlediğimiz ve diğer her şeyi göz ardı ettiğimiz anlamına gelir.
Temel olarak, yapmak parseInt(null, 23)
aynı şeydir parseInt('null', 23)
. u
İki neden l
(onlar radix 23 parçası OLAN olsa bile) 'göz ardı etmek bu. Bu nedenle, yalnızca ayrıştırıp n
tüm ifadeyi eş anlamlı hale getirebiliriz parseInt('n', 23)
. :)
Her iki durumda da harika bir soru!