Javascript, pourquoi traité comme octal

Je passe en tant que paramètre d'un identifiant à une fonction javascript, car il provient de l'interface utilisateur, il reste zéro rembourré. Mais il semble avoir (peut-être) un comportement "étrange"?

console.log(0000020948); //20948 console.log(0000022115); //9293 which is 22115's octal console.log(parseInt(0000022115, 10)); // 9293 which is 22115's octal console.log(0000033959); //33959 console.log(20948); //20948 console.log(22115); //22115 console.log(33959); //33959 

Comment puis-je m'assurer qu'ils analysent le nombre correct qu'ils sont? (décimal)

MODIFIER:

Il suffit de le préciser:

Ces nombres proviennent du serveur et ne sont pas des chaînes rembourrées. Et je fais un bouton de suppression pour chacun d'eux.

comme:

 function printDelButton(value){ console.log(typeof value); //output string return '<a href="#" onclick="deleteme('+value+')"><img src="images/del.png"></a>' } and function printDelButton(value){ console.log(typeof value); //output numeric console.log(value); //here output as octal .... :S } 

J'ai essayé: console.log(parseInt(0000022115, 10)); // 9293 which is 22115's octal console.log(parseInt(0000022115, 10)); // 9293 which is 22115's octal et analyse toujours comme Octal

Si vous recevez vos paramètres en tant qu'objets de chaîne, cela devrait fonctionner

  parseInt(string, 10) 

Pour interpréter les chaînes comme décimales, même si elles commencent par 0.

Dans votre test, vous passez la méthode parseInt un nombre, pas une chaîne, peut-être que c'est pourquoi il ne renvoie pas le résultat attendu.

essayer

  parseInt('0000022115', 10) 

au lieu de

 parseInt(0000022115, 10) 

Cela me rend 221115.

Si vous démarrez avec un 0, il est interprété comme un nombre Octal.

Voir http://www.hunlock.com/blogs/The_Complete_Javascript_Number_Reference#quickIDX2

Notez l'avertissement de l'article ici:

Vous ne devriez jamais précéder un nombre avec un zéro sauf si vous cherchez spécifiquement une conversion octale!

Envisagez de rechercher ici des idées pour supprimer les instructions 0s: Tronnez les zéros avancés d'une chaîne en Javascript

Les 0 s indiquent que le nombre est octal.

parseInt analyse une chaîne contenant un nombre.
parseInt(0000022115, 10) passe un littéral numérique. Le littéral est analysé en octal par l'interprète JS, donc vous passez une valeur numérique brute pour parseInt .

Sauf si vous pouvez intercepter une version de chaîne de ce numéro, vous avez de la chance.

Cela étant dit, si vous pouvez obtenir une version en chaîne de votre octal (l'appelant toString() ne sera pas utile), cela fonctionnera:

 parseInt(variable_string.replace(/^0+/, ''), 10); 

essayer

 /^[0]*([1-9]\d)/.exec(numberFromUI)[0] 

Cela devrait vous donner juste les nombres qui décapent les zéros (si vous devez supporter les décimales, vous devrez modifier pour tenir compte du '.', Et bien sûr ',' est amusant aussi … et j'espère vraiment que vous ne Il faut que toutes les manières folles des Européens écrivent des nombres!)