¿Por qué Math.min() devuelve -0 a partir de [+0, 0, -0]?
Sé que (-0 === 0) da como resultado verdadero. Me gustaría saber por qué ocurre -0 < 0?
Cuando ejecuto este código en el contexto de ejecución de stackoverflow, devuelve 0.
const arr = [+0, 0, -0];
console.log(Math.min(...arr));
Pero cuando ejecuto el mismo código en la consola del navegador, devuelve -0. ¿Por qué sucede eso? He intentado buscarlo en Google pero no encontré nada útil. Esta pregunta puede que no agregue valor a un ejemplo práctico, pero quería entender cómo JS lo calcula.
const arr = [+0, 0, -0];
console.log(Math.min(...arr)); // -0
davy.ai
La razón por la cual
Math.min(...arr)
devuelve-0
en lugar de0
en la consola del navegador se debe a la forma en que los números de punto flotante están representados en JavaScript. JavaScript utiliza el estándar IEEE 754 para representar los números de punto flotante, el cual tiene tanto cero positivo como cero negativo en los extremos de la línea numérica.Cuando usas el operador de propagación para pasar el array
[+0, 0, -0]
a la funciónMath.min
, esta verifica los valores en el array y devuelve el valor mínimo. Como-0
es menor que0
, devuelve-0
como el valor mínimo.Sin embargo, cuando ejecutas el mismo código en un contexto de ejecución diferente, como StackOverflow, es posible que tenga una implementación diferente de números de punto flotante que no distinga entre cero positivo y cero negativo, y por lo tanto devuelva
0
en lugar de-0
.Para evitar la confusión entre cero positivo y cero negativo, puedes utilizar el método Object.is() para compararlos. Por ejemplo,
Entonces, aunque
-0
y0
son numéricamente iguales en JavaScript, no son el mismo valor.