In JavaScript Map and Set do not distinguish 0 and -0 as different keys, instead -0 is normalized to 0.
This leads to the following 'bug':
const { tuple } = require("immutable-tuple");
if (Math.random() > 0.5) {
tuple(Object, -0); // sometimes create this first
} else {
tuple(Object, 0); // other times create this first
}
function isNegativeZero(n) {
return Object.is(n, -0);
}
console.log(isNegativeZero(tuple(Object, -0)[1])); // sometimes 'true', sometimes 'false'
In JavaScript
Map
andSet
do not distinguish0
and-0
as different keys, instead-0
is normalized to0
.This leads to the following 'bug':