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 значение, сообщающее о том, является ли переданное значение безопасным целочисленным числом или же нет.

Примеры

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

Полифил

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

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