Мы же просто выводим число, что может пойти не так?
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Под капотом, в JavaScript нет целых чисел.
Все они представлены как 64-битные
числа с плавающей точкой. Такой формат еще называют double precision
.
Первые 52 бита
используются, чтобы хранить двоичные цифры, 11 битов
хранят позицию плавающей точки и 1 бит
отвечает за знак и определяет положительное число или отрицательное.
Когда “не хватает места” чтобы сохранить большое целое число, происходит округление до другого ближайшего целого, которое полностью помещается в выделенные 64 бита
.
Значащие биты числа 9999999999999999
невозможно сохранить используя только 52 бита
, поэтому при округлении мы избавляемся от самого младшего бита, сдвигаем точку и получаем число 10000000000000000
.
В JavaScript, такая ситуация считается нормальной и не приводит к ошибке.
Если не совсем понимаешь, что происходит тут, советую изучить лекцию о двоичной системе курса CoderslangJS.
ОТВЕТ: на экран будет выведено число 10000000000000000