Великий Путь Вебмастера от идеи до интернет бизнеса
Блог Романа Чуешова
Начни зарабатывать на создании сайтов, лендингов, мобильных приложениях и новейших интернет технологиях

Разбираемся с функцией isnan в javascript: все особенности и тонкости применения

Доброго времени суток всем, кто принялся за прочтение данной публикации. Текущая статья станет полезной тем, кто пытается разобраться с функцией isNan в JavaScript.

После прочтения предложенного материала вы будете знать, что это за функция такая и для чего она была создана, какие ее особенности работы и недочеты при выдаче результатов, в каких браузерах она поддерживается, а также ознакомитесь с практическими примерами. А теперь давайте перейдем к основной части статьи!

Что такое NaN и как оно образуется?

Для начала стоит четко понимать, что NaN в JS – это глобальное свойство, значение которого представляет не-число, т.е. Not- A- Number. У данного свойства нет никаких атрибутов, и оно достаточно редко используется в программном коде, как специально заданное значение. Обычно, его стараются избегать.

Почему же так? Потому что по сути у этого свойства нет четкого значения.

Вообще NaN может возникнуть при выполнении приложения только в нескольких ситуациях:

  • Когда математические функции не могут вернуть конкретное числовое значение;
  • При делении на нуль;
  • Если результат выполнения некоторых операций является unrepresentable или undefined;
  • Переполнение стека;
  • Неудачное преобразование числового значения в строку и т.д.

Где может пригодиться функция isNaN ()?

Как вам должно быть известно, сравнивать и проверять значение Not-A-Number привычными нам способами нельзя. Таким образом, NaN ==NaN или же NaN ===NaN выдадут не положительный результат, а false. Именно поэтому используется разбираемая функция isNaN ().

Однако стоит заметить то, что за время своего существования она была изменена, и на сегодняшний день две версии метода функционируют несколько по-разному. На сегодняшний день функция работает устойчивее и корректнее, однако в некоторых случаях происходят конфликты между полученным значением и реальным решением. Поэтому давайте немного поговорим об особенностях isNaN ().

Особенности работы

В своей «молодости» данная функция работала очень запутанно и нестабильно. Довольно-таки часто вместо правильных ответов можно было получить совершенно неожиданные результаты, так как само значение «not a number» описано в стандарте чисел с плавающей точкой – IEEE-794.


Следовательно, саму проверку переменных на не-число стоит интерпретировать, как вопрос «А является ли значение данной переменной каким-либо числом из стандарта IEEE-794?». Все это касается Number.isNaN (), которую изредка используют и в наши дни.

Однако на сегодняшний день в ESMAScript 6 появился улучшенный инструмент Number.isNaN (param). Он редко выдает неверные результаты, является отличным решением для проверки на содержание значений «not a number». Правда есть одно но, в качестве значения NaN все равно принимается конкретное число, а не само определение «не-число».

Сама работа данного механизма очень проста. Он пытается переданный параметр преобразовать в число. Если же попытка проваливается, то метод возвращает положительный ответ (true), в противном случае – отрицательный ответ (false).

Стоит отметить, что данная функция поддерживается во всех видах браузеров, предназначенных как для мобильных девайсов, так и для десктопов.

Пример программного кода

Для проверки, как будет вести себя функция при различных заданных переменных, я написал небольшую программку, которая выглядит следующим образом:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>
<html>
<body>
<script>
alert(isNaN(NaN)); // true
alert(isNaN(undefined)); // true   
 
alert(isNaN(34.51));      // false
alert(isNaN(null));  // false
alert(isNaN(85));        // false
 
alert(isNaN(""));        // false: пустая строка конвертируется в 0, а это число
alert(isNaN("85"));      // false: "85" конвертируется в число 85
alert(isNaN("34.51"));   // false: "34.51" конвертируется в число 37.37
alert(isNaN("  "));       // false: Пробельные символы конвертируются в число 0
 
// Данную функцию не всегда уместно использовать. К примеру:
alert(isNaN("Текст"));   // true: так как при конвертировании не удасться "Текст" преобразовать к числовому представлению, а значит получим NaN
 
</script>
 
</body>
</html>

Вот и все, что вам нужно знать о разбираемой функции. Надеюсь, материал статьи вам понравился. Буду рад вас видеть среди моих подписчиков. Не забывайте делиться с друзьями ссылками на понравившиеся публикации. До новых встреч! Пока-пока!

С уважением, Роман Чуешов


Прочитано: 9 раз
Этот блог уже читают
читай и ты!
Оставить коментарий
:p :-p 8) 8-) :lol: =( :( :-( :8 ;) ;-) :(( :o:
  • Денис

    Насколько актуально на данный момент переполнение стека? Я читал, что современные процессоры имеют защиту от переполнения стека. Первым эащиту ввело АМД, за ним Интел. И было это лет 7-8 назад.

    29.01.2017 в 05:14
  • Денис

    Если в JavaScript вводимые данные не имеют типа, сложно ожидать, что не будет переполнения стека. С одной стороны отсутствие типа плюс, с другой может оказаться уязвимостью в виде переполнения стека.

    29.01.2017 в 05:17