JavaScript: проверьте, является ли переменная числом

Введение JavaScript - это язык с динамической типизацией, что означает, что интерпретатор определяет тип переменной во время выполнения. На практике это позволяет нам использовать одну и ту же переменную для хранения разных типов данных в одном и том же коде. Это также означает, что без документации и согласованности мы не всегда знаем тип переменной в нашем коде, когда мы ее используем. Работа со строкой или массивом, когда мы ожидаем числа, может привести к странным результатам в нашем коде. В этой статье мы рассмотрим вариометр.

Вступление

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

comments powered by Disqus