Si predetermina la raíz a 8 (si la cadena comienza con un 0) en la función parseInt de JavaScript me molesta, solo porque sigo olvidando pasar el segundo argumento opcional como 10. Estoy buscando una respuesta que me diga por qué lo hace sentido para tenerlo por defecto a 8.¿Por qué la base para el parseInt de JavaScript por defecto es 8?
Respuesta
Solo se "predetermina" a 8 si la cadena de entrada comienza con 0. Esto es un desafortunado remanente de C y C++.
En su lugar, puede usar Number('0123')
o, como dijo en la pregunta, parseInt('0123', 10)
.
How do I work around JavaScript's parseInt octal behavior?
¿Me puede decir más acerca de este remanente?
Si un número comienza con 0
y contiene dígitos entre (e inclusive) 0 a 7, se interpreta como un número octal (con base 8 en lugar de 10).
En parseInt Sin embargo, si una cadena comienza con un 0
Siempre es interpeted como octal, y la búsqueda se detiene cuando encuentra un carácter no válido (por ejemplo, los dígitos o 8
9
o un personaje como z
).
parseInt("070"); //56
parseInt("70"); //70
parseInt("070", 10); //70
parseInt("78"); //78
parseInt("078"); //7, because it stops before 8
Si usted necesita para convertir una cadena en un número, y está seguro de que no contiene caracteres no válidos o partes fraccionarias, se puede multiplicar con 1 para hacer una serie de ella:
1 * "070"; //70
Personalmente prefiero este enfoque, y creo que es más rápido que llamar a funciones.
Al menos en Chrome, 'parseInt' no es tan inteligente. 'parseInt ('019')' devuelve '1', y' parseInt ('09') 'devuelve 0. Ouch. –
Para aquellos que no entienden de lo que Matt Ball está hablando, la primera respuesta presentada contenía el primer párrafo solamente. – Lekensteyn
- 1. Marca "hacer" por defecto "hacer -j 8"
- 2. ¿Por qué [5,6,8,7] [1,2] = 8 en JavaScript?
- 3. ¿Por qué un C++ bool var es verdadero por defecto?
- 4. ¿Qué es en Java el 'paquete por defecto del sistema'?
- 5. ¿Por qué los rieles ignoran el paquete por defecto?
- 6. Cómo crear valor por defecto para el argumento de la función en Clojure
- 7. constructor por defecto para int
- 8. Problemas con javascript "parseInt()"
- 9. por defecto el acceso herencia de clases
- 10. El resultado de SQLAlchemy para la columna UTF-8 es del tipo 'str', ¿por qué?
- 11. Bloquear la animación por defecto para startActivity
- 12. ¿Por qué Run.Text se vincula de manera bidireccional por defecto?
- 13. ¿Por qué la propiedad DoubleBuffered es por defecto falsa en un DataGridView y por qué está protegida?
- 14. Javascript regex y parseInt
- 15. campo Inicialización por valor por defecto es redundante
- 16. ¿Por qué parseInt produce NaN con Array # map?
- 17. por qué es una base de Linux para dispositivos Android
- 18. ¿Por qué XSLT genera todos los textos por defecto?
- 19. ¿Por qué las clases no están selladas por defecto?
- 20. ¿Qué es antlr3 y por qué está referenciado por defecto en un proyecto VS2012 MVC4?
- 21. ¿Por qué kerberos está por defecto en NTLM en WCF?
- 22. ¿Es equivalente PHP a la función parseInt de JavaScript?
- 23. ¿Qué devuelve una función php por defecto?
- 24. base de datos: ¿por qué el emparejamiento
- 25. ¿Cómo puedo solucionar el comportamiento octal de ParseInt de JavaScript?
- 26. Pregunto: ¿MongoDB _id es único por defecto?
- 27. ¿Por qué el uso de dos sizeofs funciona para verificar si una clase es construible por defecto, pero una no?
- 28. emulador por defecto Android
- 29. ¿Por qué eval es inseguro en javascript?
- 30. ¿Es privado un campo C# por defecto?
¿Puede decirme más sobre este arrastre? –
Sí. Es estúpido, malvado, malo y desagradable, una "característica" mal diseñada implementada únicamente porque los idiomas anteriores lo hicieron. –
Un unario '+' es una mejor opción que utilizar 'Number'. Unario '+' ignora los formatos octales (pero sigue respetando los formatos hexadecimales) y es más rápido que una llamada a función. – Reid