Проверка чисел в JavaScript
- Зачем проверять числа
- Проверка через typeof
- Number.isFinite()
- Number.isNaN()
- Number.isInteger()
- Проверка ввода пользователя
- Итого
Проверка чисел нужна, когда значение может прийти не в том виде, который мы ожидаем. Например, пользователь ввел текст вместо числа, вычисление дало NaN, а деление на ноль вернуло Infinity.
let value = Number('JavaScript');
console.log(value);
Результат:
NaN
Если не проверить такое значение, дальше в вычислениях могут появиться странные результаты.
Зачем проверять числа
Обычно число проверяют перед расчетами или перед сохранением данных.
Например, нужно убедиться, что:
- значение действительно является числом;
- число не равно
NaN; - число не равно
Infinityили-Infinity; - число целое, если нужна штука, возраст, страница или количество.
Для разных проверок есть разные инструменты.
Проверка через typeof
Оператор typeof показывает тип значения.
console.log(typeof 25);
console.log(typeof '25');
Результат:
number
string
Можно проверить, что значение относится к типу number:
let value = 25;
if (typeof value === 'number') {
console.log('Это число');
}
Но у такой проверки есть важный нюанс.
console.log(typeof NaN);
console.log(typeof Infinity);
Результат:
number
number
NaN и Infinity тоже имеют тип number. Поэтому typeof проверяет только тип, но не говорит, что перед нами обычное число для расчетов.
Number.isFinite()
Number.isFinite() проверяет, является ли значение обычным конечным числом.
console.log(Number.isFinite(25));
console.log(Number.isFinite(3.14));
console.log(Number.isFinite(NaN));
console.log(Number.isFinite(Infinity));
Результат:
true
true
false
false
Для большинства обычных расчетов это самая удобная проверка: значение должно быть числом, не NaN и не бесконечностью.
Метод не преобразует строки.
console.log(Number.isFinite('25'));
Результат:
false
Если значение пришло строкой, сначала его нужно явно преобразовать.
Number.isNaN()
Number.isNaN() проверяет, является ли значение именно NaN.
let value = Number('text');
console.log(Number.isNaN(value));
Результат:
true
Метод полезен после преобразования строки в число, когда нужно понять, получилось число или нет.
let first = Number('10');
let second = Number('hello');
console.log(Number.isNaN(first));
console.log(Number.isNaN(second));
Результат:
false
true
Для проверки обычного числа чаще удобнее Number.isFinite(), потому что он сразу отсекает и NaN, и Infinity.
Number.isInteger()
Number.isInteger() проверяет, является ли значение целым числом.
console.log(Number.isInteger(10));
console.log(Number.isInteger(10.5));
Результат:
true
false
Такая проверка нужна, когда дробные значения не подходят.
let count = 3.5;
if (Number.isInteger(count)) {
console.log('Количество подходит');
} else {
console.log('Нужно целое число');
}
Результат:
Нужно целое число
Строки метод тоже не преобразует.
console.log(Number.isInteger('10'));
Результат:
false
Проверка ввода пользователя
prompt() всегда возвращает строку. Поэтому сначала проверим пустой ввод, потом преобразуем значение в число, а уже после этого проверим результат.
let value = prompt('Введите цену');
if (value === '') {
console.log('Введите значение');
} else {
let price = Number(value);
if (Number.isFinite(price)) {
console.log(price * 2);
} else {
console.log('Введите число');
}
}
Почему пустую строку проверяем отдельно? Потому что Number(”) возвращает 0.
console.log(Number(''));
Результат:
0
Если пустой ввод в вашей задаче не должен считаться нулем, его нужно обработать до преобразования.
Если нужно именно целое число, после преобразования можно использовать Number.isInteger().
let value = '5';
let count = Number(value);
console.log(Number.isInteger(count));
Результат:
true
Итого
Проверка чисел зависит от того, что именно нужно узнать.
typeof value === ‘number’проверяет только тип значения.Number.isFinite(value)проверяет обычное конечное число.Number.isNaN(value)проверяет, является ли значениеNaN.Number.isInteger(value)проверяет целое число.- Если значение пришло строкой, сначала используйте
Number(), а потом проверяйте результат. - Пустую строку лучше проверять отдельно, если она не должна превращаться в
0.