Learn JavaScript

Number.isInteger() - метод для проверки целого числа в JavaScript

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

Метод возвращает true только для значений типа number, у которых нет дробной части.

Синтаксис

Number.isInteger(value)

value - значение, которое нужно проверить.

Что делает Number.isInteger()

Метод отвечает на вопрос: это целое число или нет.

console.log(Number.isInteger(10));   // true
console.log(Number.isInteger(-5));   // true
console.log(Number.isInteger(3.14)); // false

Это удобно, когда нужно отдельно проверить, что число не дробное.

Что возвращает Number.isInteger()

Number.isInteger() всегда возвращает булево значение:

  • true, если это целое число
  • false, если это дробное число, NaN, Infinity или другой тип
console.log(Number.isInteger(0));        // true
console.log(Number.isInteger(2.5));      // false
console.log(Number.isInteger(Infinity)); // false

3 и 3.0

Если число записано как 3.0, метод всё равно вернёт true.

console.log(Number.isInteger(3));   // true
console.log(Number.isInteger(3.0)); // true

Для JavaScript это одно и то же число без дробной части.

Без неявного приведения типов

Как и другие методы Number.*, Number.isInteger() ничего не преобразует автоматически.

console.log(Number.isInteger("10")); // false
console.log(Number.isInteger(null)); // false
console.log(Number.isInteger(true)); // false

Если значение приходит строкой, обычно сначала его приводят к числу:

const value = Number("10");

console.log(Number.isInteger(value)); // true

Number.isInteger() и Number.isFinite()

Эти методы решают разные задачи.

console.log(Number.isFinite(3.14));   // true
console.log(Number.isInteger(3.14));  // false
  • Number.isFinite() проверяет, что число конечное
  • Number.isInteger() дополнительно требует, чтобы у числа не было дробной части

То есть каждое целое число конечно, но не каждое конечное число целое.

Number.isInteger() и typeof

Проверка через typeof здесь тоже не заменяет метод.

console.log(typeof 3.14); // "number"
console.log(typeof NaN);  // "number"

Оба значения имеют тип number, но только для одного из них Number.isInteger() даст true.

Большие числа и Number.isSafeInteger()

Это важный нюанс.

Number.isInteger() проверяет только то, что число целое. Он не говорит, безопасно ли это число с точки зрения точности.

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

Если важна точность для очень больших чисел, обычно нужен Number.isSafeInteger().

Когда это полезно

Number.isInteger() удобно использовать, когда:

  • нужно проверить индекс, счётчик или количество
  • важны только целые значения без дробей
  • число уже было получено через Number() или parseFloat()

Пример:

const count = Number(userInput);

if (!Number.isInteger(count)) {
  console.log("Введите целое число");
}

После Number() и parseFloat()

Метод часто используют после числового преобразования.

const value = Number("42");

console.log(Number.isInteger(value)); // true

А здесь результат уже другой:

const value = parseFloat("42.5");

console.log(Number.isInteger(value)); // false

Частые ошибки

Проверять строку вместо числа

console.log(Number.isInteger("15")); // false

Если значение строковое, сначала его обычно преобразуют:

const value = Number("15");

console.log(Number.isInteger(value)); // true

Путать целое число и безопасное целое число

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

Для обычных задач этого различия почти не видно, но при больших числах оно важно.

Думать, что достаточно typeof

const value = 2.5;

console.log(typeof value === "number"); // true
console.log(Number.isInteger(value));   // false

typeof проверяет тип, а не то, является ли число целым.

Быстрая памятка

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

Коротко

Number.isInteger() - это удобный способ проверить, получили ли вы целое число в JavaScript. Главное, что стоит запомнить: метод не приводит типы автоматически и не заменяет Number.isSafeInteger(), если для вас важна точность больших чисел.