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

Проверка целых чисел в JavaScript с помощью isInteger
Раздел: Числа, Проверки
isInteger(value: number): boolean

Функция Number.isInteger()

Number.isInteger() - это статический метод встроенного объекта Number в JavaScript. Основное назначение функции - определить, является ли переданное значение целым числом. Метод возвращает логическое значение.

Функция используется, когда требуется строгая проверка типа значения на принадлежность к целым числам. Она игнорирует строки, которые можно преобразовать в целые числа, и проверяет именно тип и значение аргумента.

Аргументы функции

Метод принимает ровно один аргумент - значение, которое необходимо проверить:

  • value (обязательный) - любое значение JavaScript, которое нужно проверить на целочисленность.

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

Функция возвращает булево значение:

  • true - если переданное значение является числом типа number, не являющимся NaN или Infinity, и не имеет дробной части.
  • false - во всех остальных случаях (дробные числа, строки, null, undefined, объекты, Infinity, NaN).

Базовые примеры использования

Примеры демонстрируют различные сценарии проверки целых чисел:

console.log(Number.isInteger(0)); // true
true
console.log(Number.isInteger(10)); // true
true
console.log(Number.isInteger(-15)); // true
true
console.log(Number.isInteger(3.14)); // false
false
console.log(Number.isInteger('42')); // false
false
console.log(Number.isInteger(NaN)); // false
false
console.log(Number.isInteger(Infinity)); // false
false
console.log(Number.isInteger(true)); // false
false

Альтернативные методы проверки в JavaScript

1. Глобальная функция isNaN() и Number.isNaN()
Определяет, является ли значение NaN. Number.isNaN() более надежна, так как не выполняет приведение типов.

2. Оператор typeof и проверка остатка от деления
Комбинация проверки типа и математической операции: typeof n === 'number' && n % 1 === 0. Работает аналогично Number.isInteger(), но менее читаема.

3. Функция parseInt() с сравнением
parseInt(n) === n. Может давать неожиданные результаты из-за особенностей parseInt().

4. Метод Number.isSafeInteger()
Проверяет, является ли число не только целым, но и безопасным целым числом (в диапазоне от -(2^53 - 1) до 2^53 - 1). Более строгая проверка, чем isInteger().

Когда какую функцию использовать:
• Number.isInteger() - для большинства случаев проверки целочисленности.
• Number.isSafeInteger() - когда важна точность работы с большими числами.
• Кастомная проверка с typeof и % - если требуется поддержка старых браузеров без полифила.

Проверка целых чисел в других языках программирования

PHP: Функция is_int() или is_integer(). Проверяет тип переменной.

var_dump(is_int(23));   // bool(true)
var_dump(is_int('23')); // bool(false)
var_dump(is_int(23.5)); // bool(false)
bool(true)
bool(false)
bool(false)

Python: Функция isinstance() с типом int или метод is_integer() для чисел с плавающей точкой.

print(isinstance(5, int))       # True
print(isinstance(5.0, int))     # False
print((5.0).is_integer())       # True
print((5.5).is_integer())       # False
True
False
True
False

MySQL: Оператор MOD или функция MOD() для проверки остатка от деления.

SELECT 5 MOD 2;    -- 1
SELECT 5.5 MOD 1; -- 0.5
1
0.5

C: Проверка через сравнение с приведением типов или использование функции fmod().

#include <math.h>
#include <stdio.h>
int main() {
    double num = 5.0;
    if (num == (int)num) {
        printf("Целое число\n");
    }
    if (fmod(num, 1) == 0) {
        printf("Целое число\n");
    }
    return 0;
}
Целое число
Целое число

Типичные ошибки при использовании

1. Путаница с глобальной функцией isInteger
В JavaScript нет глобальной функции isInteger, только Number.isInteger().

// Ошибка: isInteger is not defined
console.log(isInteger(5));
Uncaught ReferenceError: isInteger is not defined

2. Ожидание приведения типов
Метод не преобразует строки в числа, в отличие от некоторых других функций JavaScript.

// Неверное ожидание
console.log(Number.isInteger('10')); // false, а не true
false

3. Проверка больших чисел без учета безопасного диапазона
Number.isInteger() вернет true для чисел за пределами безопасного диапазона, что может вызвать проблемы с точностью.

console.log(Number.isInteger(9007199254740993)); // true
console.log(Number.isSafeInteger(9007199254740993)); // false
true
false

4. Проверка null или undefined
Метод возвращает false для null и undefined, что иногда не ожидается.

console.log(Number.isInteger(null)); // false
console.log(Number.isInteger(undefined)); // false
false
false

Изменения в последних версиях

Метод Number.isInteger() был добавлен в спецификацию ECMAScript 2015 (ES6). С момента добавления функция не претерпела значительных изменений в поведении.

Важные аспекты реализации:

  • Функция стала доступна во всех современных браузерах и средах выполнения JavaScript.
  • Для поддержки в старых средах требуется использование полифилов.
  • Стандартная реализация соответствует спецификации ECMAScript без существенных отклонений.

Пример полифила для старых браузеров:

if (!Number.isInteger) {
  Number.isInteger = function(value) {
    return typeof value === 'number' && 
           isFinite(value) && 
           Math.floor(value) === value;
  };
}

Расширенные примеры использования

1. Фильтрация массива целых чисел
Использование в комбинации с методом filter() для выборки целых чисел из массива.

Пример javascript
const arr = [1, 2.5, '3', 4, null, 5.0, NaN, Infinity];
const integers = arr.filter(Number.isInteger);
console.log(integers);
[1, 4, 5]

2. Валидация входных данных
Проверка пользовательского ввода перед математическими операциями.

Пример javascript
function calculateFactorial(n) {
    if (!Number.isInteger(n) || n < 0) {
        throw new Error('Аргумент должен быть неотрицательным целым числом');
    }
    if (n === 0 || n === 1) return 1;
    return n * calculateFactorial(n - 1);
}
console.log(calculateFactorial(5)); // 120
// console.log(calculateFactorial(5.5)); // Ошибка
120

3. Проверка целочисленных свойств объекта
Определение, все ли значения в объекте являются целыми числами.

Пример javascript
const obj = {a: 1, b: 2, c: 3.14, d: 4};
const allIntegers = Object.values(obj).every(Number.isInteger);
console.log(allIntegers);
false

4. Различение целых и дробных чисел в научной нотации
Функция корректно работает с числами в экспоненциальной записи.

Пример javascript
console.log(Number.isInteger(1e3)); // true (1000)
console.log(Number.isInteger(1.23e4)); // false (12300)
console.log(Number.isInteger(1.0e5)); // true (100000)
true
false
true

5. Граничные случаи с нулем
Особые случаи проверки нулевых и отрицательных нулевых значений.

Пример javascript
console.log(Number.isInteger(0)); // true
console.log(Number.isInteger(-0)); // true
console.log(Number.isInteger(0.0)); // true
console.log(Number.isInteger(-0.0)); // true
true
true
true
true

6. Комбинирование с другими проверками
Использование в цепочке условий с другими проверками типов.

Пример javascript
function processNumber(num) {
    if (typeof num !== 'number') {
        return 'Не число';
    }
    if (!isFinite(num)) {
        return 'Бесконечность или NaN';
    }
    if (Number.isInteger(num)) {
        return `Целое число: ${num}`;
    }
    return `Дробное число: ${num}`;
}
console.log(processNumber(7));
console.log(processNumber(7.5));
console.log(processNumber('7'));
Целое число: 7
Дробное число: 7.5
Не число

JS isInteger function comments

En
IsInteger Determines whether the passed value is an integer