IsSafeInteger: примеры (JAVASCRIPT)

Проверка безопасных целых чисел: Number.isSafeInteger
Раздел: Числа, Проверки
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, которые могут содержать большие числовые идентификаторы.

Пример javascript
function validateUserIds(idsArray) {
return idsArray.every(id => Number.isSafeInteger(id));
}
const apiResponse = [100, 9007199254740990, 500];
console.log(validateUserIds(apiResponse));
true

Фильтрация безопасных целых чисел из смешанного массива данных.

Пример javascript
const data = [7, 3.14, "123", 9007199254740993, NaN, Infinity];
const safeInts = data.filter(Number.isSafeInteger);
console.log(safeInts);
[7]

Проверка результата арифметических операций с большими числами перед дальнейшими вычислениями.

Пример javascript
const bigNum = 9007199254740990;
const sum = bigNum + 10;
console.log(Number.isSafeInteger(sum));
console.log(sum);
true
9007199254741000

JS isSafeInteger function comments

En
IsSafeInteger Determines whether the provided value is a number that is a safe integer