Ignacio Vazquez-Abrams est correct, mais permet de voir exactement comment il fonctionne...
D' 15.1.2.2 parseInt (string , radix)
:
Lorsque le parseInt fonction est appelée,
les mesures suivantes sont prises:
- Laissez inputString être ToString(string).
- Soit S une nouvelle chaîne de inputString composé de la première
caractère qui n'est pas un
StrWhiteSpaceChar et tous les personnages
suite à ce personnage. (En d'autres
mots, supprimer l'espace blanc.)
- Laisser signe sera de 1.
- Si S n'est pas vide et le premier caractère de S est un signe moins -, laissez
signe de -1.
- Si S n'est pas vide et le premier caractère de S est un signe + ou un
signe -, puis supprimer le premier
personnage de S.
- Soit R = ToInt32(radix).
- Laissez stripPrefix être vrai.
- Si R ≠ 0, un. Si R < 2 ou R > 36, puis retour NaN. b. Si R ≠ 16, laissez
stripPrefix être faux.
- Autre chose, R = 0 un. Soit R = 10.
- Si stripPrefix est vrai, alors une. Si la longueur de S est au moins 2 et de la
les deux premiers caractères de S sont soit
"0x" ou "0X", puis supprimer le premier
deux personnages de la S et soit R = 16.
- Si S contient un caractère qui n'est pas un radix-R chiffre, soit Z le
sous-chaîne de S, composé de toutes les
les caractères avant le premier de ces
caractère; sinon, laissez-Z S.
- Si Z est vide, le retour de NaN.
- Laissez mathInt être la mathématique valeur entière qui est représenté par Z
dans radix-R notation, à l'aide de lettres
A-Z et a-z pour les chiffres avec les valeurs 10
par le biais de 35. (Cependant, si R est de 10 et Z
contient plus de 20 significative
chiffres, chaque chiffre significatif après
le 20ème peut être remplacé par un 0 chiffres,
au gré de la mise en œuvre;
et si R n'est pas 2, 4, 8, 10, 16, ou
32, puis mathInt peut être un
dépendant de l'implémentation rapprochement
pour les mathématiques de la valeur entière
est représenté par Z dans radix-R
la notation.)
- Laissez-le nombre le Nombre de la valeur pour mathInt.
- Retour signe × nombre.
NOTE parseInt peut interpréter seulement un
leader de la partie de la chaîne comme une
valeur d'entier; il ignore tout
les caractères qui ne peuvent pas être interprétées
dans le cadre de la notation d'un nombre entier,
et aucune indication n'est donnée que tout
ces caractères ont été ignorés.
Il y a deux parties importantes ici. J'ai mis en caractères gras les deux d'entre eux. Alors tout d'abord, nous devons savoir ce que l' toString
de la représentation de l' null
. Nous devons examiner Table 13 - ToString Conversions
dans la section 9.8.0 pour cette information:
Grande, alors maintenant, nous savons que ce toString(null)
en interne donne un 'null'
chaîne de caractères. Grande, mais exactement comment ça poignée de chiffres (caractères) qui ne sont pas valides dans la base fournie?
Nous regardons au-dessus de 15.1.2.2
et nous voyons l'observation suivante:
Si S contient un caractère qui est
pas un radix-R chiffre, soit Z le
sous-chaîne de S, composé de toutes les
les caractères avant le premier de ces
caractère; sinon, laissez-Z S.
Cela signifie que nous nous occupons de tous les chiffres AVANT la spécifié radix et ignorer tout le reste.
En gros, faire parseInt(null, 23)
est la même chose que parseInt('null', 23)
. L' u
entraîne les deux l
s'être ignoré (même s'ils font partie de la base 23). Par conséquent, nous ne pouvons analyser uniquement n
, faisant de l'ensemble de la déclaration synonyme d' parseInt('n', 23)
. :)
De toute façon, la grande question!