Ignacio Vazquez-Abrams est correct, mais permet de voir exactement comment cela fonctionne ...
De 15.1.2.2 parseInt (string , radix)
:
Lorsque la fonction parseInt est appelée, les étapes suivantes sont effectuées:
- Laissez inputString être ToString (chaîne).
- Soit S une sous-chaîne nouvellement créée de inputString composée du premier caractère qui n'est pas un StrWhiteSpaceChar et de tous les caractères qui suivent ce caractère. (En d'autres termes, supprimez le premier espace blanc.)
- Soit signe 1.
- Si S n'est pas vide et que le premier caractère de S est un signe moins -, soit signe soit -1.
- Si S n'est pas vide et que le premier caractère de S est un signe plus + ou un signe moins -, supprimez le premier caractère de S.
- Soit R = ToInt32 (radix).
- Que stripPrefix soit vrai.
- Si R ≠ 0, alors a. Si R <2 ou R> 36, retournez NaN. b. Si R ≠ 16, que stripPrefix soit faux.
- Sinon, R = 0 a. Soit R = 10.
- Si stripPrefix est vrai, alors a. Si la longueur de S est d'au moins 2 et que les deux premiers caractères de S sont «0x» ou «0X», supprimez les deux premiers caractères de S et laissez R = 16.
- Si S contient un caractère qui n'est pas un chiffre radix-R, alors soit Z la sous-chaîne de S composée de tous les caractères avant le premier de ces caractères; sinon, que Z soit S.
- Si Z est vide, retournez NaN.
- Soit mathInt la valeur entière mathématique représentée par Z dans la notation radix-R, en utilisant les lettres AZ et az pour les chiffres de 10 à 35. (Cependant, si R est 10 et Z contient plus de 20 chiffres significatifs, chaque significatif le chiffre après le 20 peut être remplacé par un chiffre 0, au choix de l'implémentation; et si R n'est pas 2, 4, 8, 10, 16 ou 32, alors mathInt peut être une approximation dépendante de l'implémentation de l'entier mathématique valeur représentée par Z en notation radix-R.)
- Soit number la valeur Number pour mathInt.
- Signe de retour × numéro.
REMARQUE parseInt peut interpréter uniquement une portion de début de chaîne comme une valeur entière; il ignore tous les caractères qui ne peuvent pas être interprétés comme faisant partie de la notation d'un entier, et aucune indication n'est donnée que ces caractères ont été ignorés.
Il y a deux parties importantes ici. Je les ai mis en gras tous les deux. Donc, tout d'abord, nous devons découvrir quelle est la toString
représentation de null
. Nous devons regarder Table 13 — ToString Conversions
dans la section 9.8.0 pour cette information:
Génial, alors maintenant nous savons que faire en toString(null)
interne produit une 'null'
chaîne. Très bien, mais comment gère-t-il exactement les chiffres (caractères) qui ne sont pas valides dans le radix fourni?
Nous regardons ci-dessus 15.1.2.2
et nous voyons la remarque suivante:
Si S contient un caractère qui n'est pas un chiffre radix-R, alors soit Z la sous-chaîne de S composée de tous les caractères avant le premier de ces caractères; sinon, que Z soit S.
Cela signifie que nous traitons tous les chiffres AVANT le radix spécifié et ignorons tout le reste.
Fondamentalement, faire parseInt(null, 23)
est la même chose que parseInt('null', 23)
. Le u
fait que les deux l
soient ignorés (même s'ils font partie de la radix 23). Par conséquent, nous ne pouvons analyser que n
, ce qui rend la déclaration entière synonyme de parseInt('n', 23)
. :)
De toute façon, bonne question!