Доброго времени суток всем, кто принялся за прочтение данной публикации. Текущая статья станет полезной тем, кто пытается разобраться с функцией isNan в JavaScript.
После прочтения предложенного материала вы будете знать, что это за функция такая и для чего она была создана, какие ее особенности работы и недочеты при выдаче результатов, в каких браузерах она поддерживается, а также ознакомитесь с практическими примерами. А теперь давайте перейдем к основной части статьи!
Что такое NaN и как оно образуется?
Для начала стоит четко понимать, что NaN в JS – это глобальное свойство, значение которого представляет не-число, т.е. Not- A- Number. У данного свойства нет никаких атрибутов, и оно достаточно редко используется в программном коде, как специально заданное значение. Обычно, его стараются избегать.
Почему же так? Потому что по сути у этого свойства нет четкого значения.
Вообще NaN может возникнуть при выполнении приложения только в нескольких ситуациях:
- Когда математические функции не могут вернуть конкретное числовое значение;
- При делении на нуль;
- Если результат выполнения некоторых операций является unrepresentable или undefined;
- Переполнение стека;
- Неудачное преобразование числового значения в строку и т.д.
Где может пригодиться функция isNaN ()?
Однако стоит заметить то, что за время своего существования она была изменена, и на сегодняшний день две версии метода функционируют несколько по-разному. На сегодняшний день функция работает устойчивее и корректнее, однако в некоторых случаях происходят конфликты между полученным значением и реальным решением. Поэтому давайте немного поговорим об особенностях isNaN ().Как вам должно быть известно, сравнивать и проверять значение Not-A-Number привычными нам способами нельзя. Таким образом, NaN ==NaN или же NaN ===NaN выдадут не положительный результат, а false. Именно поэтому используется разбираемая функция 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> |
Вот и все, что вам нужно знать о разбираемой функции. Надеюсь, материал статьи вам понравился. Буду рад вас видеть среди моих подписчиков. Не забывайте делиться с друзьями ссылками на понравившиеся публикации. До новых встреч! Пока-пока!
С уважением, Роман Чуешов
Насколько актуально на данный момент переполнение стека? Я читал, что современные процессоры имеют защиту от переполнения стека. Первым эащиту ввело АМД, за ним Интел. И было это лет 7-8 назад.
Если в JavaScript вводимые данные не имеют типа, сложно ожидать, что не будет переполнения стека. С одной стороны отсутствие типа плюс, с другой может оказаться уязвимостью в виде переполнения стека.