Evitar que salga NaN como resultado en Javascript [SOLUCIONADO]

Errores comunes en el manejo de datos: prevenir la aparición de “NaN”

En ocasiones, cuando trabajamos con JavaScript, nos encontramos con un invitado no deseado en nuestras operaciones numéricas: “NaN”, que significa “Not-a-Number”. Este resultado surge cuando realizamos una operación matemática que no puede ser definida con un valor numérico real. Te mostraremos formas efectivas de manejar y evitar que tus funciones y cálculos en JavaScript se vean comprometidos por este problema.

Control de tipos de datos y validación de entradas

El primer paso para evitar la aparición de NaN es asegurarse de que la información con la que vas a trabajar sea del tipo correcto. JavaScript es un lenguaje de tipado dinámico, lo que significa que las variables pueden cambiar de tipo. Es ahí donde radica la importancia de realizar controles y validaciones para prevenir resultados inesperados.

Una de las prácticas más recomendables es usar la función `typeof` para comprobar el tipo de dato antes de realizar cualquier operación numérica. Si esperas un número y `typeof` te devuelve un resultado diferente, sabrás que tienes que tomar medidas antes de proceder.

if (typeof valor !== 'number') {
    // Manejar el caso cuando valor no es un número
} else {
    // Realizar operaciones sabiendo que valor es numérico
}

Lidiando con valores que pueden ser convertidos a números

A veces, incluso si tienes una cadena de texto, es posible que quieras intentar convertirla a un número para trabajar con ella. Por ejemplo, `parseInt` y `parseFloat` son dos funciones que transforman cadenas de texto en números cuando es posible. Sin embargo, si la cadena no tiene un formato adecuado, el resultado será NaN. Es vital siempre verificar después de intentar este tipo de conversiones.

let numero = parseInt('1234abc');
if (isNaN(numero)) {
    // El resultado es NaN, manejar el error o realizar otra acción
} else {
    // Continuar con las operaciones, ya que numero es un valor válido
}

Evitando la propagación de “NaN” en operaciones matemáticas

Una vez que “NaN” aparece en una operación matemática, cualquier resultado subsecuente continuará siendo “NaN”. Esta es la naturaleza contagiosa del mismo, por ello es crucial interceptarlo lo antes posible. Para hacer esto, puedes utilizar la función global `isNaN()` para comprobar si algún valor es “NaN” antes de avanzar a la siguiente operación.

let x = NaN;
let y = 5;
let resultado = x * y;
if (isNaN(resultado)) {
    // Si el resultado es NaN, tomar decisiones alternativas
} else {
    // Si el resultado no es NaN, podemos usarlo con seguridad
}

Tratamiento de valores undefined o null

En JavaScript, los valores `undefined` y `null` pueden ser fuentes de “NaN” si se intenta utilizarlos en cálculos numéricos, por ello, es imprescindible verificar también estas posibles entradas.

let valor = undefined;
let suma = valor + 10; // Esto dará como resultado NaN
if (typeof valor === 'undefined' || valor === null) {
    // Tomar medidas para manejar valores indefinidos o nulos
} else {
    // Ejecutar el cálculo
}

Estrategias de fallback: valores predeterminados y el operador ||

Una técnica muy útil es proporcionar un valor predeterminado en caso de que la operación pueda resultar en NaN. Esto se puede hacer utilizando el operador lógico `||`, que devolverá el primer valor si es “truthy” o el segundo si el primero es “falsy”.

let input = '';
let numeroValido = parseInt(input) || 0; // 0 es nuestro valor de fallback
// numeroValido será 0 si input no puede convertirse a un número

Adicionalmente, puedes proporcionar este valor predeterminado a través de una función que encapsule la lógica de la conversión y validación del resultado.

function convertirANumero(valor, valorFallback = 0) {
    let numero = Number(valor);
    return isNaN(numero) ? valorFallback : numero;
}

let numeroConvertido = convertirANumero('abc123', 10); // Usaremos 10 como valor predeterminado

Auditoría del código y testeo unitario

Una preventiva medida para combatir el surgimiento inesperado de “NaN” es establecer una serie de pruebas que cubran los casos de uso comunes y los bordes de tu aplicación. El desarrollo basado en pruebas (Test-Driven Development, TDD) otorga la seguridad de que tus funciones manejarán correctamente varios tipos de entrada y te permitirá detectar problemas con un enfofoque sistemático y automatizado.

Usando herramientas de testeo como Jest, podrás crear pruebas para garantizar que tus funciones realicen las conversiones y cuentas de manera adecuada, manejando correctamente los valores edge que podrían causar la aparición de “NaN”.

describe('Funciones matemáticas', () => {
    test('convertirANumero retorna un número cuando la entrada es válida', () => {
        expect(convertirANumero('100')).toBe(100);
    });

    test('convertirANumero retorna el valor predeterminado cuando la entrada es inválida', () => {
    expect(convertirANumero('abc', 10)).toBe(10);
    });
});

El manejo de errores mediante try…catch

Hay situaciones en las que una función puede lanzar un error y provocar, como consecuencia, que tus operaciones devuelvan “NaN”. Una manera efectiva de manejar estas excepciones es utilizando las declaraciones `try…catch`. Esto te dará control sobre cómo quieres manejar el error y qué hacer si algo no va según lo esperado.

function dividir(a, b) {
    if (b === 0) {
        throw new Error('No se puede dividir por cero');
    }
    return a / b;
}

try {
    let resultado = dividir(10, 0);
} catch (error) {
    console.error(error); // Manejar el error acepiadamente
}

En resumen, prevenir los resultados “NaN” en JavaScript es una cuestión de anticipación y manejo correcto de datos. Con técnicas adecuadas de verificación de tipos, operadores de cortocircuito, estructuras de control de errores, y cumpliendo con un riguroso ciclo de pruebas, podrás garantizar que tus programas se comporten de forma estable y predecible. No dejes que un “Not-a-Number” socave la integridad de tus cálculos numéricos o la experiencia del usuario. Implementa buenas prácticas y mantén tus operaciones libres de “NaN”.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad