Вступление
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 типов:
undefinedbooleannumberstringbigintsymbolobjectnull(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() захватывает все конечные числа и наиболее
соответствует нашим требованиям.