Validación de Números: isNaN(), isFinite() e isInteger()
Aprende a validar números en JavaScript usando los métodos isNaN(), isFinite() e isInteger() para verificar NaN, valores finitos y enteros.
TL;DR - Resumen rápido
- isNaN('hola') → true (coerción): Number.isNaN('hola') → false (más estricto)
- Number.isFinite(42) → true: rechaza Infinity, -Infinity y NaN
- Number.isInteger(42.0) → true: 42.0 === 42 en JavaScript (no hay decimales)
- Number.isSafeInteger verifica rango ±2⁵³-1: fuera de ese rango pierde precisión
- typeof NaN === 'number': paradójico pero NaN es técnicamente tipo number
Introducción a la Validación de Números
La validación de números es una tarea fundamental en programación, especialmente cuando trabajas con entrada de usuario, datos externos o resultados de cálculos que pueden ser impredecibles. JavaScript proporciona varios métodos para validar números y determinar si son válidos, finitos o enteros.
JavaScript proporciona múltiples métodos de validación con diferentes niveles de estrictez:
- <strong>Number.isNaN(val):</strong> Solo true si val es exactamente NaN (sin coerción)
- <strong>isNaN(val):</strong> Convierte a número primero, menos confiable (isNaN('abc') → true)
- <strong>Number.isFinite(val):</strong> true si es número finito (rechaza Infinity y NaN)
- <strong>Number.isInteger(val):</strong> true si es entero (42, 42.0, no 42.5)
- <strong>Number.isSafeInteger(val):</strong> true si es entero en rango seguro ±2⁵³-1
Regla general: usa métodos Number.* (más estrictos) en lugar de funciones globales para evitar coerción inesperada de tipos.
Importante: NaN es un Número
Aunque su nombre significa "Not a Number" (No es un número), NaN es en realidad un tipo de dato numérico en JavaScript. Es un valor especial que representa un resultado que no es un número válido, como el resultado de dividir 0 por 0 o convertir un string no numérico.
isNaN(): Verificar NaN
El método isNaN() verifica si un valor es NaN (Not a Number). Este método es útil para detectar operaciones matemáticas que producen resultados inválidos, como divisiones por cero o conversiones fallidas de strings a números.
Usos Prácticos de isNaN()
isNaN() se usa comúnmente para validar el resultado de operaciones matemáticas que pueden producir NaN, como divisiones por cero o conversiones de strings a números. También es útil para validar entrada de usuario antes de realizar cálculos.
El ejemplo muestra cómo isNaN() detecta valores NaN en diferentes situaciones. Observa que el método retorna true cuando el valor es NaNy false en cualquier otro caso, incluso para valores que no son números.
Este ejemplo muestra aplicaciones prácticas de isNaN() en validación de entrada de usuario y cálculos. El método es especialmente útil para validar que los resultados de operaciones matemáticas son válidos antes de usarlos en cálculos adicionales.
Limitaciones y Errores Comunes
Aunque isNaN() es útil, tiene algunas limitaciones importantes que debes conocer. La función global isNaN() realiza una conversión de tipo antes de verificar, lo que puede causar resultados inesperados. Para una validación más estricta, usaNumber.isNaN().
Este ejemplo muestra las diferencias entre isNaN() global y Number.isNaN(). La función global convierte el valor a número antes de verificar, lo que puede causar que valores como strings numéricos retornen true. Number.isNaN() es más estricto y solo retorna true si el valor es estrictamente NaN.
Advertencia: isNaN() Global vs Number.isNaN()
La función global isNaN() convierte el valor a número antes de verificar, lo que puede causar resultados inesperados. Usa Number.isNaN() para una validación más estricta que solo retorna true si el valor es estrictamente NaN.
isFinite(): Verificar Números Finitos
El método isFinite() verifica si un valor es un número finito, es decir, que no esInfinity, -Infinity ni NaN. Este método es útil para validar que un número está dentro de un rango válido para cálculos matemáticos.
Usos Prácticos de isFinite()
isFinite() se usa comúnmente para validar que los resultados de cálculos matemáticos son válidos y no producen valores infinitos. También es útil para validar entrada de usuario y garantizar que los números están dentro de un rango aceptable.
El ejemplo muestra cómo isFinite() detecta valores finitos e infinitos. El método retorna true para números finitos y false para Infinity,-Infinity y NaN.
Este ejemplo muestra aplicaciones prácticas de isFinite() en validación de cálculos matemáticos y entrada de usuario. El método es especialmente útil para prevenir errores causados por divisiones por cero o cálculos que producen valores infinitos.
isInteger(): Verificar Enteros
El método Number.isInteger() verifica si un valor es un número entero, es decir, que no tiene parte decimal. Este método es útil para validar que un número es un entero antes de usarlo en operaciones que requieren enteros, como índices de arrays o iteraciones.
Usos Prácticos de isInteger()
Number.isInteger() se usa comúnmente para validar que los números son enteros antes de usarlos como índices de arrays, en bucles o en operaciones que requieren enteros. También es útil para validar entrada de usuario que debe ser un número entero.
El ejemplo muestra cómo Number.isInteger() detecta números enteros y decimales. El método retorna true solo para números enteros y false para números con parte decimal, Infinity, NaN y valores no numéricos.
Este ejemplo muestra aplicaciones prácticas de Number.isInteger() en validación de índices de arrays y entrada de usuario. El método es especialmente útil para prevenir errores causados por usar números decimales como índices de arrays.
Comparación de Métodos de Validación
Entender las diferencias entre isNaN(), isFinite() e isInteger()es crucial para elegir el método correcto para cada situación. Cada método tiene un propósito específico y comportamientos distintos que es importante comprender.
Este ejemplo comparativo muestra las diferencias clave entre los tres métodos de validación. Observa cómo cada método responde de manera diferente a los mismos valores, lo que te ayuda a elegir el método correcto según lo que necesitas validar.
- <strong>isNaN()</strong> verifica si un valor es NaN, útil para detectar operaciones matemáticas inválidas.
- <strong>isFinite()</strong> verifica si un valor es un número finito, útil para validar rangos y prevenir infinitos.
- <strong>isInteger()</strong> verifica si un valor es un entero, útil para validar índices y valores que deben ser enteros.
- <strong>Number.isNaN()</strong> es más estricto que isNaN() global y no realiza conversión de tipo.
- <strong>Number.isFinite()</strong> es más estricto que isFinite() global y no realiza conversión de tipo.
Tip Profesional: Cuándo Usar Cada Método
Usa isNaN() para validar resultados de operaciones matemáticas que pueden producirNaN. Usa isFinite() para validar que los números están dentro de un rango válido. Usa isInteger() para validar que los números son enteros antes de usarlos como índices o en bucles.
Errores Comunes
Estos son los errores más frecuentes que encontrarás al trabajar con métodos de validación de números, especialmente cuando estás aprendiendo o migrando código legacy.
Este error ocurre cuando usas la función global isNaN() en lugar deNumber.isNaN(). La función global convierte el valor a número antes de verificar, lo que puede causar resultados inesperados. La solución es usar Number.isNaN() para una validación más estricta.
Este error ocurre cuando usas la función global isFinite() en lugar deNumber.isFinite(). La función global convierte el valor a número antes de verificar, lo que puede causar que strings numéricos retornen true. La solución es usarNumber.isFinite() para una validación más estricta.
Este error ocurre cuando usas un número decimal como índice de array sin validar primero que es un entero. JavaScript truncará el decimal, lo que puede causar comportamientos inesperados. La solución es usar Number.isInteger() para validar que el índice es un entero antes de usarlo.
Resumen: Validación de Números
Conceptos principales:
- •isNaN() verifica si un valor es NaN (Not a Number)
- •isFinite() verifica si un valor es un número finito (no infinito ni NaN)
- •isInteger() verifica si un valor es un número entero
- •Number.isNaN() es más estricto que la función global isNaN()
- •Number.isFinite() es más estricto que la función global isFinite()
Mejores prácticas:
- •Usa Number.isNaN() para validar estrictamente si un valor es NaN
- •Usa isFinite() para validar que los números están dentro de un rango válido
- •Usa isInteger() para validar que los números son enteros antes de usarlos como índices
- •Valida la entrada de usuario antes de realizar cálculos matemáticos
- •Usa Number.isFinite() para una validación más estricta que la función global