Вступление
JavaScript - это язык с динамической типизацией, что означает, что интерпретатор определяет тип переменной во время выполнения. На практике это позволяет нам использовать одну и ту же переменную для хранения разных типов данных в одном и том же коде. Это также означает, что без документации и согласованности мы не всегда знаем тип переменной в нашем коде, когда мы ее используем.
Работа со строкой или массивом, когда мы ожидаем числа, может привести к странным результатам в нашем коде. В этой статье мы рассмотрим различные функции, которые могут помочь определить, является ли переменная, которую мы используем, числом.
Строки, содержащие числа вроде «10», не принимаются. В JavaScript
специальные значения, такие как NaN
, Infinity
и -Infinity
, тоже
являются числами, однако мы будем игнорировать эти значения.
С учетом этих требований лучше всего использовать функцию
isFinite()
из встроенного объекта
Number
Однако разработчики обычно использовали для этой цели другие функции, в
частности Number.isNaN()
и функцию typeof()
Создадим несколько переменных для тестирования:
let intVar = 2;
let floatVar = 10.5;
let stringVar = '4';
let nanVar = NaN;
let infinityVar = Infinity;
let nullVar = null;
let undefinedVar = undefined;
Использование функции Number.isFinite ()
Функция Number.isFinite()
проверяет, является ли переменная числом, но
также проверяет, является ли это конечным значением. Следовательно, он
возвращает false
для чисел NaN
, Infinity
или -Infinity
.
Давайте проверим это на переменных, которые мы определили выше:
> Number.isFinite(intVar);
true
> Number.isFinite(floatVar);
true
> Number.isFinite(stringVar);
false
> Number.isFinite(nanVar);
false
> Number.isFinite(infinityVar);
false
> Number.isFinite(nullVar);
false
> Number.isFinite(undefined);
false
Это именно то, что мы хотели. Специальные нефинитные числа игнорируются, как и любые переменные, не являющиеся числовыми.
Если вы хотите проверить, является ли переменная числом, лучше всего
использовать Number.isFinite()
.
Использование функции Number.isNaN ()
Стандартный объект Number
имеет метод isNaN()
Он принимает один
аргумент и определяет, равно ли его значение NaN
. Поскольку мы хотим
проверить, является ли переменная числом, мы будем использовать оператор
not !
, в наших чеках.
Теперь проверим, могут ли оператор not и Number.isNaN()
фильтровать
только числа:
> !Number.isNaN(intVar);
true
> !Number.isNaN(floatVar);
true
> !Number.isNaN(stringVar);
true # Wrong
> !Number.isNaN(nanVar);
false
> !Number.isNaN(infinityVar);
true # Wrong
> !Number.isNaN(nullVar);
true # Wrong
> !Number.isNaN(undefinedVar);
true # Wrong
Этот метод является довольно разрешительным, поскольку он принимает
значения, которые вообще не являются числами. Этот метод лучше всего
подходит, когда вы знаете, что у вас есть число и хотите проверить,
является ли оно NaN
, а не для общей проверки числа.
Использование функции typeof ()
Функция typeof()
- это глобальная функция, которая принимает
переменную или значение в качестве аргумента и возвращает строковое
представление своего типа. Всего у JavaScript 9 типов:
undefined
boolean
number
string
bigint
symbol
object
null
(typeof()
отображается как объект)function
(особый тип объекта)
Чтобы проверить, является ли переменная числом, нам просто нужно
проверить, является ли значение, возвращаемое typeof()
, "number"
.
Давайте попробуем это на тестовых переменных:
> typeof(intVar) == 'number';
true
> typeof(floatVar) == 'number';
true
> typeof(stringVar) == 'number';
false
> typeof(nanVar) == 'number';
true # Wrong
> typeof(infinityVar) == 'number';
true # Wrong
> typeof(nullVar) == 'number';
false
> typeof(undefined) == 'number';
false
Функция typeof()
работает намного лучше, чем Number.isNaN()
. Он
правильно определяет, что строковая переменная, null
и undefined
не
являются числами. Однако он возвращает true для NaN
и Infinity
.
Хотя это технически правильный результат, NaN
и Infinity
являются
специальными числовыми значениями, и в большинстве случаев мы бы
предпочли их игнорировать.
Заключение
В этой статье мы узнали, как проверить, является ли переменная в
JavaScript числом. Функция Number.isNaN()
подходит только в том
случае, если мы знаем, что наша переменная является числом, и нам нужно
проверить, является ли она конкретно NaN
или нет.
Функция typeof()
подходит, если ваш код может работать с NaN
,
Infinity
или -Infinity
а также с другими числами.
Метод Number.isFinite()
захватывает все конечные числа и наиболее
соответствует нашим требованиям.