Как проверить, что это число js
JavaScript, будучи языком с динамической типизацией, предоставляет разработчикам гибкость, но также ставит задачу точной проверки типов данных. Особенно это касается чисел 🔢, которые могут быть представлены в разных форматах: целые, дробные, конечные, бесконечные, а также могут быть закодированы в строках. Рассмотрим подробно, как в JavaScript можно уверенно определить, что перед нами именно число, и какие у него есть особенности.
В самом начале нашего погружения в мир чисел 🧮 JavaScript важно понимать, что не все значения, которые выглядят как числа, на самом деле ими являются. Например, строка "123" с точки зрения JavaScript — это строка, а не число. Для точной идентификации типа и свойств числовых значений в JavaScript существует ряд встроенных методов, которые мы подробно рассмотрим.
🎯 Проверка на конечность числа: Number.isFinite()
Метод Number.isFinite()
— ваш надежный помощник в определении, является ли значение конечным числом. 🧐 Это значит, что оно не равно Infinity
(бесконечности), -Infinity
(отрицательной бесконечности) или NaN
(Not a Number — не число).
Вот основные тезисы об Number.isFinite()
:
- Аргумент: Метод принимает только один аргумент — значение, которое нужно проверить.
- Не число: Если передать методу любое значение, которое не является числом, он вернет
false
. - Конечность: Метод вернет
true
только в том случае, если значение — конечное число. - Бесконечность и NaN: Бесконечность (как
Infinity
илиNumber.POSITIVE_INFINITY
,Number.NEGATIVE_INFINITY
) иNaN
всегда возвращаютfalse
.
javascript
console.log(Number.isFinite(10)); // true
console.log(Number.isFinite(3.14)); // true
console.log(Number.isFinite(Infinity)); // false
console.log(Number.isFinite(NaN)); // false
console.log(Number.isFinite("10")); // false (строка)
console.log(Number.isFinite(null)); // false
Этот метод крайне полезен, когда необходимо убедиться, что вы имеете дело с реальным, измеримым числом, например, перед выполнением математических операций.
🧐 Проверка, является ли значение числом: Number.isNaN() и typeof
Для проверки, является ли значение именно числом, часто используется метод Number.isNaN()
и оператор typeof
.
- Number.isNaN(): Этот метод, вопреки своему названию, не проверяет, является ли значение «не числом» в общем смысле. Он проверяет, является ли значение именно
NaN
(Not a Number). - Важно отметить, что
isNaN()
глобальная функция работает иначе, чемNumber.isNaN()
. - Глобальная функция
isNaN()
попытается преобразовать значение в число перед проверкой, что может привести к неинтуитивным результатам. - typeof: Для проверки типа данных используйте оператор
typeof
. - Если
typeof
возвращает "number", значит, значение является числом. - Однако,
typeof Infinity
также вернет "number", поэтому для более точной проверки используйтеNumber.isFinite()
. typeof NaN
также вернет "number".
javascript
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN(10)); // false
console.log(typeof 10); // "number"
console.log(typeof Infinity); // "number"
console.log(typeof NaN); // "number"
console.log(typeof "10"); // "string"
Важно помнить: NaN
является числовым значением, но представляющим «не число». Поэтому typeof NaN
вернет "number".
🧮 Проверка на целое число: Number.isInteger()
Если вам нужно убедиться, что число является целым, используйте метод Number.isInteger()
.
- Простота: Он принимает один аргумент и возвращает
true
, если аргумент — целое число, иfalse
в противном случае. - Без дробей: Метод не распознает дробные числа как целые.
javascript
console.log(Number.isInteger(10)); // true
console.log(Number.isInteger(10.5)); // false
console.log(Number.isInteger("10")); // false (строка)
Это особенно полезно при работе с индексами массивов, циклами и другими ситуациями, где требуется гарантировать целочисленное значение.
🔍 Проверка на простое число: Алгоритмический подход
Проверка, является ли число простым, требует более алгоритмического подхода.
- Простое число: Простое число — это натуральное число больше 1, которое делится только на 1 и на само себя без остатка.
- Алгоритм: Для проверки на простоту нужно перебрать все числа от 2 до корня квадратного из проверяемого числа. Если число делится на какое-либо из них без остатка, то оно не является простым.
javascript
function isPrime(num) {
if (num <= 1) return false;
if (num <= 3) return true;
if (num % 2 0 || num % 3 0) return false;
For (let i = 5; i * i <= num; i += 6) {
if (num % i 0 || num % (i + 2) 0) return false;
}
return true;
}
Console.log(isPrime(7)); // true
console.log(isPrime(10)); // false
console.log(isPrime(17)); // true
Этот алгоритм является достаточно эффективным для большинства случаев.
✍️ Проверка, является ли строка числом: parseInt(), try-catch и регулярные выражения
Проверка, является ли строка числом, может быть немного сложнее.
- parseInt(): Метод
parseInt()
преобразует строку в целое число. Если строка не может быть преобразована в число, он вернетNaN
. - Этот метод можно использовать в сочетании с
Number.isNaN()
. - Метод
parseInt()
может игнорировать нечисловые символы в начале строки и преобразовывать только начальную часть в число. - try-catch: Для предотвращения ошибок при преобразовании строки в число можно использовать блок
try-catch
. - Регулярные выражения: Регулярные выражения позволяют проверить, состоит ли строка только из цифр.
javascript
function isStringNumber(str) {
try {
const num = parseInt(str);
return !Number.isNaN(num) && String(num) str;
} catch (e) {
return false;
}
}
Function isStringOnlyDigits(str) {
return /^\d+$/.test(str);
}
Console.log(isStringNumber("123")); // true
console.log(isStringNumber("123a")); // false
console.log(isStringNumber("abc")); // false
console.log(isStringOnlyDigits("123")); // true
console.log(isStringOnlyDigits("123a")); // false
Регулярные выражения предоставляют более точный контроль над структурой строки.
📝 Выводы и Заключение
В JavaScript работа с числами 🔢 требует внимательности и понимания нюансов. Использование методов Number.isFinite()
, Number.isNaN()
, Number.isInteger()
и оператора typeof
позволяет точно определить тип и свойства числовых значений. Для проверки на простоту чисел нужен алгоритмический подход. А для проверки строк на числовое представление, используйте parseInt()
, try-catch
и регулярные выражения. Помните, что NaN
— это числовое значение, представляющее «не число», а typeof Infinity
и typeof NaN
вернут "number". Понимание этих особенностей поможет вам писать более надежный и предсказуемый код.
❓ FAQ: Часто задаваемые вопросы
Q: Как отличить целое число от дробного?A: Используйте Number.isInteger()
. Он вернет true
только для целых чисел.
typeof NaN
возвращает "number"?
A: NaN
(Not a Number) — это специальное числовое значение, представляющее «не число». Поэтому, хоть оно и не является «обычным» числом, его тип — "number".
A: Используйте регулярное выражение /^\d+$/.test(str)
или метод isStringOnlyDigits()
, описанный выше.
Number.isFinite()
?
A: Он проверяет, является ли значение конечным числом (не Infinity
, -Infinity
или NaN
).
A: Используйте parseInt()
для преобразования в целое число или parseFloat()
для преобразования в число с плавающей запятой. Помните про возможные ошибки и используйте try-catch
.