Appels à parseInt
doit toujours spécifier une base dans le deuxième argument :
parseInt("08", 10);
Les versions antérieures de JavaScript traitent les chaînes de caractères commençant par 0
en octal (lorsqu'aucune base n'est spécifiée) et ni en 08
ni 09
sont des nombres octaux valides.
Depuis le site Mozilla la documentation :
Si radix est indéfini ou 0, JavaScript part du principe suivant :
- Si la chaîne d'entrée commence par "0x" ou "0X", le radix est 16 (hexadécimal).
- Si la chaîne d'entrée commence par " (octal). Cette fonctionnalité n'est pas standard, et certaines implémentations ne la supportent pas délibérément (elles utilisent plutôt le radix 10). Pour cette raison toujours spécifier un radix lors de l'utilisation de parseInt .
- I commence par une autre valeur, le radix est 10 (décimal).
Si le premier caractère ne peut être converti en nombre, parseInt renvoie NaN.
Et à partir de la ECMAScript 3 standard :
Lorsque le radix est 0 ou indéfini et le numéro de la chaîne commence par un 0 non suivi d'un x o X , alors la mise en œuvre interpréter le nombre soit comme octal, soit comme décimal. décimal. Les implémentations sont encouragées à interpréter les nombres dans ce cas comme étant décimaux.
La dernière version de JavaScript ( ECMAScript 5 ) abandonne ce comportement mais vous devriez spécifier encore le radix pour satisfaire les navigateurs plus anciens.