JavaScript es un lenguaje especial. No importa cuánto lo estudies, siempre habrá momentos que harán que incluso un profesional experimentado empiece a rascarse los nabos.
Este artículo proporciona algunos rompecabezas de JavaScript relacionados con el comportamiento inusual del lenguaje. Ayudarán a alguien a aprender algo nuevo, y alguien simplemente podrá actualizar sus conocimientos.
Tarea 1 - "BANANA"
Este tweet en ese momento ha ganado cierta popularidad en el segmento de Twitter en inglés dedicado a JavaScript. No menos importante porque no es del todo obvio lo que está sucediendo aquí.
SoluciónLa "b" y la "a" al principio son solo cadenas que se suman a "ba". Después de "a" verá dos signos más (+). El primero de ellos está destinado a la suma, pero el segundo es un operador unario que convierte la cadena que lo sigue en un número. Como la segunda "a" no se puede convertir a un número, se convierte a "NaN".
Así tenemos: "ba" + "NaN" + "a" - "baNaNa". toLowerCase nos da insidiosamente el resultado final: "banana".
Tarea 2 - Agregar matrices
Esta es una tarea simple, pero una persona que no está familiarizada con el funcionamiento de JavaScript, puede ser confusa.
SoluciónPrimero, las matrices se convierten en cadenas: "1,2,3" y "4,5,6". El resultado de la concatenación de estas líneas será la respuesta final: la cadena "1,2,34,5,6".
Tarea 3: función parseInt ()
De todas las tareas de JavaScript, esta fue la más difícil para mí.
Si probablemente se encontró todo con parseInt en JavaScript de una forma u otra, entonces menos personas saben acerca de la existencia del segundo parámetro opcional "radix". Esta es la base del sistema numérico del primer argumento.
SoluciónEl primer argumento "nulo" se convierte en una cadena. El primer carácter de esta cadena "n" se convierte en un número en el sistema numérico con base 24. El resultado de esta conversión es 23.
parseInt continúa analizando la cadena carácter por carácter hasta que encuentra un carácter que no puede convertir en un número. Este es el segundo carácter de la cadena: "u", ya que no existe dicho dígito en el sistema de números con base 24.
De esta manera:
parseInt(null, 24) === parseInt("null", 24) parseInt("null", 24) === parseInt("n", 24) parseInt("n", 24) === 23
Tarea 4: números de coma flotante de precisión
Parece horrible, pero para ser justos, en un grado u otro, puede encontrar uno similar en cualquier idioma que use cálculos de punto flotante.
Solución console.log(0.1 + 0.2);
Las constantes "0.2" y "0.3" en el programa se aproximarán a sus valores "reales" en la representación de la máquina. Y sucedió que el doble más cercano a "0.2" es mayor que el número racional "0.2". Por otro lado, el doble más cercano a "0.3" es menor que el racional "0.3".
Por lo tanto, la suma de "0.1" y "0.2" en el código es mayor que el racional "0.3", y la constante "0.3" en el código es menor que el racional "0.3".
Nota para la anfitriona: nunca use "===" o "==" para trabajar con números de coma flotante. Utilizar en su lugar
if (abs(x - y) < toleranceValue) { ... }
Conclusión
Sí, cuando se trabaja con JavaScript, hay muchos momentos WTF. Por otro lado, ¿qué otro idioma puede dar tantas sensaciones inolvidables?
A continuación hay una lista de enlaces (en inglés) para un estudio en profundidad de las tareas de esta publicación (y no solo):