Quiz: ¿Puedes contar con JavaScript?
¿Conoces la diferencia entre parseInt y parseFloat?
parseInt(" 123456.00")La función parseInt ignora los espacios y analiza la secuencia inicial de dígitos como un entero. Aquí, se detiene en el punto decimal, por lo que solo se devuelve 123456.
0.1 + 0.2 === 0.3Debido a errores de precisión de punto flotante, 0.1 + 0.2 no es exactamente igual a 0.3. Por la forma en que los números de punto flotante se almacenan en memoria, el resultado es 0.30000000000000004. El estándar IEEE 754 para el manejo de aritmética de punto flotante es el culpable, no puede representar algunos números con exactitud. Este es un problema común en todos los lenguajes de programación. Eventualmente te encontrarás con un decimal que se repite infinitamente, y sin importar el lenguaje, la computadora simplemente tiene que dejar de perseguir dígitos infinitamente repetidos.
Algunos lenguajes como Python y Java tienen Decimal o BigDecimal para manejar esto, pero no está incorporado en JavaScript. Puedes usar bibliotecas como big.js o decimal.js para tratar estos casos.
(Nota: Algunos lenguajes están diseñados para manejar fracciones, números imaginarios, etc., a un nivel lógico más alto, preservando expresiones literales. Pero aún así deben lidiar con los mismos problemas de precisión de punto flotante a nivel de hardware.)
Number.MAX_VALUE * 2Dado que Number.MAX_VALUE es el número regular representable más grande en JavaScript, superar su límite provocará un desbordamiento rápido, básicamente verás resultados sin sentido. Multiplicarlo por 2 da como resultado Infinity.
Ya sabes, JavaScript a veces es así.
parseInt("42") === parseFloat("42")En JavaScript, tanto parseInt como parseFloat interpretarán la cadena “42” como el número 42. Por lo tanto, la comparación parseInt("42") === parseFloat("42") evalúa a true. Mientras que parseInt deja de analizar en el primer carácter no numérico, parseFloat continúa analizando hasta encontrar un carácter que no forme parte de un número de punto flotante. Sin embargo, como no hay puntos decimales ni otros caracteres no numéricos en “42”, ambas funciones devuelven el mismo valor.
¿Qué resultará esto?
parseInt("0x2A") === parseInt("2a", 16)Cualquier cadena de entrada que empiece con 0x se trata automáticamente como hexadecimal (radix 16).
Por lo tanto es equivalente a pasar un radix de 16. Así, parseInt("0x2A") es lo mismo que parseInt("2a", 16). (No distingue mayúsculas de minúsculas.)
[24, 'One', 42].map(parseInt)El segundo argumento de parseInt (el radix) coincide con el argumento index de los métodos de array. Esto produce resultados inesperados, ya que parseInt("One", 1) devuelve NaN por la entrada inválida.
El primer elemento, 24, se analiza como 24 en base 0 (detección automática), así que sigue siendo 24. El segundo elemento, 'One', se analiza como NaN en base 1. El tercer elemento, 42, se analiza usando base 2. En base 2, '42' es NaN, por lo que el resultado es [24, NaN, NaN].
Esto es una trampa frecuente con parseInt y map. Si quieres convertir un array de strings a números, el único método “incorporado” seguro es .map(Number) o añadir una función de callback .map(x => parseInt(x, 10)).
¿Cuál será el resultado de este código?
console.log(parseInt(null), Number(null))parseInt coacciona la entrada a una cadena, así que null se convierte en "null". Como "null" no tiene caracteres válidos en base‑10 (números normales) devolverá NaN.
Number(null) devuelve 0. porque a JS le gusta mantenerte alerta.
¿Por qué? Bueno, podría profundizar si hay interés.
¿Cuál será el resultado de este hechizo?
parseInt(null, 36)Dado que parseInt siempre coacciona la entrada a una cadena, null se convierte en la cadena "null".
En base 36 (hexatrigesimal, si llevas la cuenta), la cadena "null" representa 1112745.
Los valores secuenciales de nulk, null y nulm son respectivamente 1112744, 1112745 y 1112746 en base 36.
Tabla de Comparación
| Function | parseInt | parseFloat | Number | BigInt |
|---|---|---|---|---|
| Ignores Whitespace | ✅ | ✅ | ✅ | ✅ |
.map(FN) | ❌ | ☑️ | ✅ | ✅ |
| Supports Radix Arg | ✅ | ❌ | ❌ | ❌ |
| Binary/Octal/Hex literals | ✅ | ❌ | ✅ | ✅ |
Invalid chars 42 oh no | 42 | 42 | NaN | SyntaxError |
¿Cómo lo hiciste? 🧐
¿Necesitas un descanso después de tanto binario?
Pftt, recuerda: ¡rompe después de las habilidades!
¡Entra en mi gimnasio para aplastar más retos! 💪