Diferencia entre isNaN y Number.isNaN
Casi todo el mundo sabe qué es «isNaN» y cómo utilizarlo. Significa «¿es eso que parece un número, realmente un número o no?» Devuelve verdadero si se da «No es un número». Supongo que entendiste el punto. Ok, este es el trato; ¿Cuál es la diferencia entre isNaN y Number.isNaN?
Antes de comenzar a explicar quiero agradecer a mi amigo Rafael por animarme a escribir.
Empecemos con isNaN. Esta es una función global a la que puede llamar desde cualquier lugar. Veámoslo en acción:
const badDivision = 17 / "something"; // NaN
isNaN(badDivision); // true
Es así de simple pero hay algunas direcciones erróneas. Estos son los ejemplos:
Como puede ver, de acuerdo con la implementación de isNaN, trata el valor de la cadena como un número y devuelve el resultado en función de esto. Marque `isNaN (‘blabla’)`
Entonces, para resolver esos conceptos erróneos tenemos El método estático Number.isNaN viene con EcmaScript 2015 # Number.isNaN
¿Qué está haciendo?
En mi caso, tengo un método que acepta dos parámetros como tipo de número y hago algunas animaciones sobre la escala del objetivo objeto. De alguna manera, después de hacer una pequeña refactorización, obtuve un comportamiento extraño. Sí, debería haber escrito pruebas unitarias, la culpa es mía. De todos modos, en algunos casos, el método recibe parámetros indefinidos. Así que necesito revisarlos.
Escribí esto:
Mi descuido me lleva a una lógica incorrecta. Porque Number.isNaN (undefined) me devolverá falso. (old isNaN (undefined) devuelve verdadero) Así que cambié así:
function animate(targetScaleX, targetScaleY) {
if (!Number.isNaN(targetScaleX * targetScaleY)) {
return;
} // Do Animation
}
Así que parece estar funcionando. Pero quería cuidar cada posible fracaso. Tal vez reciba nulo en lugar de indefinido. Si recibo nulo, mi lógica fallará. ¿Por qué?
null * null; // 0
null * 8 // 0
Creo que lo ves. Así que actualicé el código de esta manera:
Mi objetivo era comparar dos valores para que no estuvieran definidos o fueran nulos. Y mi viaje termina escribiendo ese artículo y actualizando mis conocimientos. La implementación no es elegante, lo sé, pero el viaje fue educativo.