Есть два возможных значения (битовые представления) для 0. Это не уникально. Особенно в числах с плавающей точкой это может произойти. Это потому, что числа с плавающей запятой на самом деле хранятся в виде формулы.
Целые числа также могут храниться разными способами. Вы можете иметь числовое значение с дополнительным знаковым битом, поэтому в 16-битном пространстве вы можете хранить 15-битное целочисленное значение и знаковый бит. В этом представлении значения 1000 (hex) и 0000 оба равны 0, но одно из них равно +0, а другое - -0.
Этого можно избежать, вычитая 1 из целочисленного значения, чтобы оно варьировалось от -1 до -2 ^ 16, но это было бы неудобно.
Более распространенный подход - хранить целые числа в «двух дополнениях», но, очевидно, ECMAscript предпочел не делать этого. В этом методе числа в диапазоне от 0000 до 7FFF положительны. Отрицательные числа начинаются с FFFF (-1) до 8000.
Конечно, те же правила применимы и к большим целым числам, но я не хочу, чтобы мой F изнашивался. ;)