IsInteger: примеры (JAVASCRIPT)
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)); // truetrue
console.log(Number.isInteger(10)); // truetrue
console.log(Number.isInteger(-15)); // truetrue
console.log(Number.isInteger(3.14)); // falsefalse
console.log(Number.isInteger('42')); // falsefalse
console.log(Number.isInteger(NaN)); // falsefalse
console.log(Number.isInteger(Infinity)); // falsefalse
console.log(Number.isInteger(true)); // falsefalse
Альтернативные методы проверки в 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()) # FalseTrue False True False
MySQL: Оператор MOD или функция MOD() для проверки остатка от деления.
SELECT 5 MOD 2; -- 1
SELECT 5.5 MOD 1; -- 0.51 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, а не truefalse
3. Проверка больших чисел без учета безопасного диапазона
Number.isInteger() вернет true для чисел за пределами безопасного диапазона, что может вызвать проблемы с точностью.
console.log(Number.isInteger(9007199254740993)); // true
console.log(Number.isSafeInteger(9007199254740993)); // falsetrue false
4. Проверка null или undefined
Метод возвращает false для null и undefined, что иногда не ожидается.
console.log(Number.isInteger(null)); // false
console.log(Number.isInteger(undefined)); // falsefalse 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() для выборки целых чисел из массива.
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. Валидация входных данных
Проверка пользовательского ввода перед математическими операциями.
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. Проверка целочисленных свойств объекта
Определение, все ли значения в объекте являются целыми числами.
const obj = {a: 1, b: 2, c: 3.14, d: 4};
const allIntegers = Object.values(obj).every(Number.isInteger);
console.log(allIntegers);false
4. Различение целых и дробных чисел в научной нотации
Функция корректно работает с числами в экспоненциальной записи.
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. Граничные случаи с нулем
Особые случаи проверки нулевых и отрицательных нулевых значений.
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)); // truetrue true true true
6. Комбинирование с другими проверками
Использование в цепочке условий с другими проверками типов.
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 Не число