HOWTO · JavaScript
NEGATIVE_INFINITY en JavaScript
Este artículo lo ayudará a comprender el valor NEGATIVE_INFINITY en JavaScript.
En esta página
JavaScript representa el infinito negativo como -Infinity. La constante con nombre es Number.NEGATIVE_INFINITY; el identificador NEGATIVE_INFINITY por sí solo no es una variable global de JavaScript. Este valor es menor que todos los números finitos, pero no es el menor número finito: no existe un valor finito en el extremo inferior del rango numérico de JavaScript. El valor finito de mayor magnitud es Number.MAX_VALUE, y -Number.MAX_VALUE sigue siendo finito.
¿Qué es el infinito negativo en JavaScript?
JavaScript usa el formato numérico de doble precisión IEEE 754. Sus valores Number incluyen el infinito positivo y el negativo, además de valores finitos y NaN. El infinito negativo es menor que todos los números finitos, incluido -Number.MAX_VALUE, y es igual a sí mismo mediante igualdad estricta. No es intercambiable con NaN, que es distinto de todos los valores, incluso de sí mismo.
La propiedad estándar Number.NEGATIVE_INFINITY se evalúa como el valor numérico que se muestra como -Infinity. La forma NEGATIVE_INFINITY sirve como expresión descriptiva, pero en el código JavaScript debe ir precedida de Number.. Como los infinitos son valores numéricos y no excepciones, los cálculos pueden producirlos sin lanzar un error.
Cómo producir el infinito negativo
Dividir un valor negativo finito entre cero positivo produce infinito negativo. El desbordamiento también puede producirlo cuando un resultado negativo finito tiene una magnitud demasiado grande para representarse. Por ejemplo, multiplicar -Number.MAX_VALUE por 2 desborda y produce -Infinity. En cambio, -Number.MAX_VALUE por sí solo sigue siendo finito.
Ejecuta este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
const value = -10 / 0;
console.log(value);
-Infinity
Multiplicar el mayor valor negativo finito por 2 también desborda y produce infinito negativo:
const overflow = -Number.MAX_VALUE * 2;
console.log(overflow);
El resultado es -Infinity. En cambio, -Number.MAX_VALUE por sí solo sigue siendo finito.
El signo del cero afecta al signo de la división: un valor negativo finito dividido entre +0 produce -Infinity, mientras que dividido entre -0 produce Infinity. También puedes usar directamente la constante con nombre cuando un cálculo no exprese la intención con claridad:
const lowerBound = Number.NEGATIVE_INFINITY;
Esta declaración ilustra la sintaxis y no produce ningún resultado. En particular, Number.NEGATIVE_INFINITY es una propiedad del objeto integrado Number, no una variable que haya que declarar.
Cómo comparar y detectar el infinito negativo
La igualdad estricta permite comprobar directamente si un valor es este cuando necesitas identificarlo de forma específica. Las comparaciones relacionales sirven para determinar si un valor está por debajo de un umbral o es igual a él. Number.isFinite distingue todos los números finitos de ambos infinitos y de NaN.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
function describeNumber(value) {
if (value === Number.NEGATIVE_INFINITY) return "negative infinity";
if (Number.isFinite(value)) return "finite";
return "another non-finite value";
}
console.log(describeNumber(-Number.MAX_VALUE));
console.log(describeNumber(-10 / 0));
finite
negative infinity
Esto distingue un valor negativo grande pero finito del infinito negativo, y agrupa el infinito positivo y NaN en un resultado aparte. Las etiquetas de texto que muestra este ejemplo se conservan en inglés: indican si el valor es finito, infinito negativo u otro valor no finito. No compruebes únicamente value < 0: esa condición también se cumple con los números negativos finitos habituales. Number.isFinite(value) tampoco basta por sí sola para identificar cuál es el valor no finito; compáralo con Number.NEGATIVE_INFINITY cuando esa distinción sea relevante.
Comportamiento aritmético y casos límite
Multiplicar el infinito negativo por un número positivo finito mantiene el resultado en infinito negativo; multiplicarlo por un número negativo finito lo convierte en infinito positivo. Dividirlo entre un número positivo finito conserva el signo, mientras que dividirlo entre uno negativo finito lo cambia. Sumar un valor finito al infinito negativo da infinito negativo, y restarle un valor finito también.
Algunas combinaciones no producen un infinito. Sumar infinito positivo e infinito negativo, multiplicar cualquiera de los infinitos por cero o dividir un infinito entre otro produce NaN. En la división entre ceros con signo, el resultado depende de los signos de ambos operandos. Estas reglas importan cuando el resultado de un cálculo se usa en comparaciones posteriores: NaN no se comporta como ninguno de los infinitos y todas las comparaciones ordenadas que lo incluyen son falsas.
El mismo comportamiento de los signos se aplica al desbordamiento de valores finitos: una operación cuyo resultado matemático supera el rango representable puede producir un infinito con el signo de ese resultado. Es un resultado numérico, no una excepción; por eso, el código que deba rechazar desbordamientos tiene que comprobar explícitamente el resultado, por ejemplo con Number.isFinite.
Usos prácticos y limitaciones
El infinito negativo puede inicializar una búsqueda del máximo porque todos los candidatos finitos son mayores. Sin embargo, si la colección está vacía, el resultado permanece en -Infinity; decide si eso tiene sentido para quien llama a la función o si conviene indicar por separado que no se recibieron elementos. Este es un ejemplo breve de búsqueda del máximo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
function maximum(values) {
let result = Number.NEGATIVE_INFINITY;
for (const value of values) {
if (value > result) result = value;
}
return result;
}
Este patrón presupone que las entradas son números y que es aceptable conservar -Infinity cuando el iterable está vacío. Si las entradas pueden incluir NaN, las comparaciones con ese valor son falsas; valida o filtra los valores según la política de la aplicación.
No uses el infinito negativo como señal de error genérica: es un resultado numérico válido y, sin un contrato adicional, quien llama a la función quizá no pueda distinguir un error de un cálculo. Tampoco es un valor inicial adecuado para buscar el mínimo, porque ningún candidato finito es menor que él. Una búsqueda del mínimo suele comenzar en Infinity o usar el primer elemento válido, con una política explícita para la entrada vacía. No es una base adecuada para sumas ni promedios: al sumarlo a un número finito, el resultado sigue siendo -Infinity y contamina el cálculo.