IsSafeInteger: примеры (JAVASCRIPT)
isSafeInteger(value: number): booleanОсновные сведения о функции isSafeInteger
Метод Number.isSafeInteger() определяет, является ли переданное значение безопасным целым числом в контексте стандарта IEEE 754 для чисел двойной точности. Безопасный целочисленный диапазон простирается от -(253 - 1) до 253 - 1 (от -9007199254740991 до 9007199254740991 включительно). За этими пределами числа теряют точность при арифметических операциях.
Функция принимает один обязательный аргумент: value – проверяемое значение любого типа. Она не выполняет неявное преобразование типов. Если аргумент не является числом или не попадает в безопасный целочисленный диапазон, возвращается false.
Возвращаемое значение: логический тип true, если аргумент является числом, и его значение находится в безопасном целочисленном диапазоне. Во всех остальных случаях возвращается false.
Простые примеры использования
Проверка типичных значений:
console.log(Number.isSafeInteger(5));true
console.log(Number.isSafeInteger(9007199254740991));true
Граничные значения и выход за пределы:
console.log(Number.isSafeInteger(9007199254740992));false
Отсутствие преобразования типов:
console.log(Number.isSafeInteger('10'));false
console.log(Number.isSafeInteger(5.1));false
Альтернативные функции в JavaScript
В JavaScript существуют другие методы для проверки числовых значений.
Number.isInteger() определяет, является ли значение целым числом, без учёта безопасного диапазона. Метод Number.isFinite() проверяет, является ли значение конечным числом, исключая Infinity, -Infinity и NaN. Глобальная функция isFinite() предварительно преобразует переданный аргумент в число.
Функцию Number.isSafeInteger() предпочтительно использовать при работе с большими числами, например, при операциях с идентификаторами из внешних систем или высокоточными вычислениями, где важна целочисленная точность.
Аналоги функции в других языках
В Python проверка безопасного целого числа может быть реализована через сравнение с константами модуля sys.
import sys
def is_safe_integer(n):
return isinstance(n, int) and -2**53 <= n <= 2**53 - 1
print(is_safe_integer(9007199254740991))True
В PHP прямого аналога нет, но можно создать пользовательскую функцию.
function isSafeInteger($value) {
return is_int($value) && $value >= -9007199254740991 && $value <= 9007199254740991;
}
var_dump(isSafeInteger(9007199254740991));bool(true)
В языке C для 64-битных целых проверка диапазона выполняется через сравнение с макросами или константами, например, INT64_MAX.
Распространённые ошибки
Распространённой ошибкой является предположение, что функция преобразует строковое представление числа.
let result = Number.isSafeInteger("42");
console.log(result);false
Другой типичной ошибкой становится использование метода для проверки чисел с плавающей точкой, которые формально находятся в безопасном диапазоне, но не являются целыми.
console.log(Number.isSafeInteger(9007199254740991.0));
console.log(Number.isSafeInteger(9007199254740991.5));true
false
История изменений
Метод Number.isSafeInteger() был добавлен в стандарт ECMAScript 2015 (ES6). С момента своего появления спецификация функции остаётся стабильной, без существенных изменений в поведении или синтаксисе в последующих версиях ECMAScript.
Расширенные примеры применения
Использование при проверке данных API, которые могут содержать большие числовые идентификаторы.
function validateUserIds(idsArray) {
return idsArray.every(id => Number.isSafeInteger(id));
}
const apiResponse = [100, 9007199254740990, 500];
console.log(validateUserIds(apiResponse));true
Фильтрация безопасных целых чисел из смешанного массива данных.
const data = [7, 3.14, "123", 9007199254740993, NaN, Infinity];
const safeInts = data.filter(Number.isSafeInteger);
console.log(safeInts);[7]
Проверка результата арифметических операций с большими числами перед дальнейшими вычислениями.
const bigNum = 9007199254740990;
const sum = bigNum + 10;
console.log(Number.isSafeInteger(sum));
console.log(sum);true
9007199254741000