intente ejecutar el siguiente en JavaScript:¿Cómo puedo solucionar el comportamiento octal de ParseInt de 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 !!
acabo de aprender la manera dura que JavaScript cree que el cero indica una octal integer, y puesto que no hay "8"
o "9"
en la base-8, la función devuelve cero. Nos guste o no, this is by design.
¿Cuáles son las soluciones?
Nota: Para completar, estoy a punto de publicar una solución, pero es una solución que odio, así que publique otras respuestas/mejores.
Actualización:
La quinta edición de la norma JavaScript (ECMA-262) introduce un cambio importante que elimina este comportamiento. Mozilla tiene un buen write-up.
Paso 1) Hazte un favor y siempre incluye la raíz como se menciona en las respuestas anteriores, así como en el libro de Doug. Paso 2) Si realmente quieres aprender JavaScript, obtén una copia del libro de Doug. Es invaluable Mi libro favorito hasta ahora. Aquí hay una reseña fyi: http://realtech.burningbird.net/learning-javascript/basics/javascript-the-good-parts – fuentesjr
En los navegadores compatibles con ECMAScript 5th Edition, como Internet Explorer 9, el parámetro base predeterminado es '10 '(decimal) a menos que el número a analizar esté prefijado con' 0x', por ejemplo '0xFF', en cuyo caso el parámetro base se establece por defecto en 16. Con suerte, un día, este problema será un recuerdo lejano. –
¿Qué tal solo '+ '08 '=== 8'? ¡Cierto! Tal vez realmente necesites 'parseInt' para tu código real, pero no para lo anterior. – kojiro