Comment puis-je contourner JavaScript parseInt octal comportement?

Essayez d'exécuter les opérations suivantes dans JavaScript:

parseInt('01'); //equals 1
parseInt('02'); //equals 2
parseInt('03'); //equals 3
parseInt('04'); //equals 4
parseInt('05'); //equals 5
parseInt('06'); //equals 6
parseInt('07'); //equals 7
parseInt('08'); //equals 0 !!
parseInt('09'); //equals 0 !!

J'ai juste appris à la dure que JavaScript pense que le zéro indique une octal entier, et depuis il n'y a pas de "8" ou "9" en base 8, la fonction renvoie zéro. Comme lui ou pas, c'est par la conception.

Quelles sont les solutions?

Note: Par souci d'exhaustivité, je suis sur le point de publier une solution, mais c'est une solution que je déteste, donc s'il vous plaît poster d'autres/de meilleures réponses.


Mise à jour:

La 5ème Édition de la norme JavaScript (ECMA-262) introduit une modification importante qui élimine ce problème. Mozilla a une bonne écriture-up.

  • Étape 1) Faites-vous une faveur et de toujours mentionner le radix comme mentionné dans les réponses précédentes ainsi que dans Doug livre. Étape 2) Si vous êtes sérieux au sujet de l'apprentissage de JavaScript, puis vous en procurer une copie de Doug livre. Il est inestimable. Mes fav livre jusqu'à présent. Voici une revue pour info: realtech.burningbird.net/learning-javascript/basics/...
  • Dans ECMAScript 5ème Édition-compatible navigateurs, comme Internet Explorer 9, la base de paramètre par défaut 10 (décimal), sauf si le nombre à analyser est préfixé avec 0x, par exemple 0xFF, auquel cas la base de paramètre par défaut est 16. Je l'espère, un jour, cette question sera plus qu'un lointain souvenir.
  • Que diriez-vous simplement +'08' === 8? Vrai! Peut-être que vous avez vraiment besoin de parseInt pour votre code réel, mais pas pour la ci-dessus.
  • a) ce n'est pas un bug, corrigé le titre b) Number('08')
  • Safari du moteur JavaScript a aligné son comportement plus proche de la spécification ECMAScript. ... la méthode parseInt ne pas analyser les nombres octaux plus voir trac.webkit.org/changeset/103922
  • "la 5e Édition...introduit une modification importante qui élimine ce problème" Probablement intéressant de souligner que, même dans la 3e édition (il y a 13 ans), les mises en œuvre ont été "encouragés" par le fait de ne pas le faire: "Quand radix est 0 ou undefined et la chaîne du numéro commence avec un 0 chiffre n'est pas suivie par un x ou X, puis la mise en œuvre pourrait, à sa discrétion, d'interpréter le nombre, soit comme étant octal ou décimal. Implémentations sont invités à interpréter des nombres dans ce cas comme étant décimal." (mon emphase)
  • Merci pour la mise à jour. Je viens de lire dans langue étrange fonctionnalités et je me demandais pourquoi ça ne fonctionne pas.
  • Tout comme une note de l'endroit où il se passe à ce moment de temps: Google Docs javascript encore l'analyse à 0.
  • Il m'a fallu 3 jours pour détecter cette erreur qui se produit uniquement dans la version ie7 ou le mode de compatibilité dans l'explorateur. Les heures d'ouverture "08:mm" a obtenu des convertis "00:mm".

InformationsquelleAutor Portman | 2009-05-11