Number.isSafeInteger()

Метод Number.isSafeInteger() определяет, является ли переданное значение безопасным целым числом.

Интерактивный пример

Безопасное целое число это такое число, которое:

  • может быть точно представлено числом IEEE-754 двойной точности и
  • чьё представление IEEE-754 не может быть результатом округления любого другого целого числа, соответствующего представлению IEEE-754.

Например, число 253 - 1 является безопасным целым числом: оно может быть представлено точно и никакое другое целое число не округляется к нему ни в каком режиме округления IEEE-754. В противовес ему, число 253 не является безопасным целым числом: оно может быть точно представлено в IEEE-754, но целое число 253 + 1 не может быть напрямую представлено в IEEE-754 и округляется к числу 253 в режимах округления к ближайшему и к нулю. Безопасные целые числа состоят из всех целых чисел в диапазоне от -(253 - 1) до 253 - 1 включительно (± 9007199254740991 или ± 9,007,199,254,740,991).

Обработка значений, больших или меньших чем ~9 квадриллионов, с высокой точностью требует использования библиотеки, умеющей работать с длиной арифметикой. Ознакомьтесь с Что Каждому Программисту Необходимо Знать об Арифметике с Вещественными числами для получения дополнительной информации о представлении чисел, с плавающей запятой.

Для больших целочисленных значений, рассмотрите возможность использования типа BigInt.

Синтаксис

Number.isSafeInteger(testValue)

Параметры

testValue

Значение, проверяемое на целочисленную «безопасность».

Возвращаемое значение

Boolean значение, сообщающее о том, является ли переданное значение безопасным целочисленным числом или же нет.

Примеры

js
Number.isSafeInteger(3); // true
Number.isSafeInteger(Math.pow(2, 53)); // false
Number.isSafeInteger(Math.pow(2, 53) - 1); // true
Number.isSafeInteger(NaN); // false
Number.isSafeInteger(Infinity); // false
Number.isSafeInteger("3"); // false
Number.isSafeInteger(3.1); // false
Number.isSafeInteger(3.0); // true

Полифил

js
Number.isSafeInteger =
  Number.isSafeInteger ||
  function (value) {
    return (
      Number.isInteger(value) && Math.abs(value) <= Number.MAX_SAFE_INTEGER
    );
  };

Спецификации

Specification
ECMAScript Language Specification
# sec-number.issafeinteger

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также