что такое isnan в javascript
Форум
Справочник
isNaN
Синтаксис
Аргументы
Описание, примеры
Эта функция полезна, так как значение NaN не может быть проверено операторами эквивалентности.
самая банальная проверка на NaN это: NaN == NaN всегда будет false
т.е. переменная не равна сама себе
var a = NaN;
isNaN(a) // true
a!=a // true
Зачем тогда вообще эта функция нужна, если она строки считает NaN’ами?
Спасибо! Очень полезный сайт!
Очень нужный сайт! Никогда не догадался бы, что объязательно нужно делать так!
isNaN(null) также false
единственный верный вариант, своего рода костыль
isMyNaN(undefined)
false
isMyNaN(‘e’)
false
isMyNaN(‘1’)
false
isMyNaN(1)
false
isMyNaN(null)
false
isMyNaN(true)
false
неверно, оно вернёт false если значение === самому себе, то есть любой символ, любая строка и любое число. Даже true вернёт false
isNaN(undefined)
true
isMyNaN(undefined)
true
isNaN(‘1’)
false
isMyNaN(‘1’)
false
isNaN(null)
false
isMyNaN(null)
false
действительно
isNaN(undefined); //true
И Как сравнить теперь undefined и Nan?
isNaN(«Hi») // true
Если проверить любую строку, вернется true
Не любую
isNaN(«12») // false
isNaN(«0x12») // false
isNaN(«x12») // true
isNaN(«12x») // true
Если вопрос в корректности использования isNaN(), то.
Тоже костыль, конечно.
Но, по крайней мере для таких значений s, как undefined, null и ‘test’ (см. выше) отработало корректно.
Как задать в функции отсутствие аргументов?
Просто так. function foo()
Метод isNaN пытается преобразовать переданный параметр в число. Если параметр не может быть преобразован, возвращает true, иначе возвращает false.
Разбираемся с функцией isnan в javascript: все особенности и тонкости применения
Доброго времени суток всем, кто принялся за прочтение данной публикации. Текущая статья станет полезной тем, кто пытается разобраться с функцией isNan в JavaScript.
После прочтения предложенного материала вы будете знать, что это за функция такая и для чего она была создана, какие ее особенности работы и недочеты при выдаче результатов, в каких браузерах она поддерживается, а также ознакомитесь с практическими примерами. А теперь давайте перейдем к основной части статьи!
Что такое NaN и как оно образуется?
Для начала стоит четко понимать, что NaN в JS – это глобальное свойство, значение которого представляет не-число, т.е. Not- A- Number. У данного свойства нет никаких атрибутов, и оно достаточно редко используется в программном коде, как специально заданное значение. Обычно, его стараются избегать.
Почему же так? Потому что по сути у этого свойства нет четкого значения.
Вообще NaN может возникнуть при выполнении приложения только в нескольких ситуациях:
Где может пригодиться функция 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).
Стоит отметить, что данная функция поддерживается во всех видах браузеров, предназначенных как для мобильных девайсов, так и для десктопов.
Пример программного кода
Для проверки, как будет вести себя функция при различных заданных переменных, я написал небольшую программку, которая выглядит следующим образом:
Работа с числами в JavaScript
В этой статье подробно рассмотрим числа, математические операторы, способы преобразования числа в строку и наоборот, а также много других важных моментов.
Функция isFinite
Функция isFinite позволяет проверить, является ли аргумент конечным числом.
Функция isNaN
Функция isNaN предназначена для определения того, является ли аргумент числом или может ли быть преобразован к нему. Если это так, то функция isNaN возвращает false. В противном случае она возвращает true.
Как явно преобразовать строку в число
Явно привести строку в число можно посредством следующих способов:
Этот способ пренебрегает пробелами в начале и конце строки, а также \n (переводом строки).
Данная функция может работать с разными системами счисления (двоичной, восьмеричной, десятичной, шестнадцатеричной). Указание основание системы счисления осуществляется посредством 2 аргумента.
Кроме этого рекомендуется, всегда указывать основание системы счисления и не полагаться на значение по умолчанию установленное этой функции, например в том или ином браузере.
Кроме этого функция parseFloat в отличие от parseInt не имеет 2 аргумента, и следовательно она всегда пытается рассмотреть строку как число в десятичной системе счисления.
Преобразование числа в строку
Метод toString позволяет также указать основание системы счисления с учётом которой необходимо явно привести число к строке:
Как проверить является ли переменная числом
Определить является ли значение переменной числом можно используя один из следующих способов:
1. С использованием функций isNaN и isFinite:
2. С использованием оператора typeof и функций isFinite, isNaN:
Чётные и нечётные числа
Проверить является ли число чётным или нечётным можно посредством следующих функций:
Но перед тем как проводить такую проверку желательно убедиться что указанное значение является числом:
Простые числа в Javascript
Рассмотрим пример в котором выведем с помощью Javascript простые числа от 2 до 100.
Округление числа в Javascript
Округлить дробное число до целого значения в JavaScript можно различными способами.
Если знаков после запятой для формирования указанной точности числа не хватает, то оно дополняется нулями.
4. Используя логические операторы НЕ или ИЛИ.
Целая и дробная часть числа
Получить целую часть числа можно используя метод Math.floor() и parseInt() :
Получить дробную часть числа можно воспользовавшимся оператором процент ( % ). Данный оператор возвращает остаток, который будет получен от деления первого числа на второе. В данном случае в качестве 2 числа необходимо использовать 1.
Кроме этого дробную часть можно получить также с помощью вычислений:
Делится ли число нацело
Определить делится ли число нацело можно используя оператор процента:
Форматирование чисел
Например, выполним форматирование числа в соответствии с региональными стандартами, которые установлены в системе по умолчанию:
Например, выполним форматирование числа в соответствии с региональными стандартами России (ru):
Данный метод можно также использовать для форматирования числа в виде валюты:
Представление числа в виде процентов:
Разбить число на разряды (свойство useGrouping ):
Вывести с число с определённым количеством цифр (2) после запятой:
Сравнение чисел
Например, сравним два числа:
При сравнении чисел с дробной частью необходимо учитывать погрешности, которые могут возникать во время этих вычислений.
Например, в JavaScript сумма чисел (0.2 + 0.4) не равна 0.6:
Погрешности происходят потому что все вычисления компьютер или другое электронное устройство производит в 2 системе счисления. Т.е. перед тем как выполнить какие-то действия компьютер сначала должен преобразовать представленные в выражении числа в 2 систему счисления. Но, не любое дробное десятичное число можно представить в 2 системе счисления точно.
Например, число 0.2510 в двоичную систему преобразуется точно.
Например, число 0.210 можно преобразовать в 2 систему только с определённой точностью:
В результате эти погрешности скажутся при вычисления суммы двух чисел и результатах сравнения. Т.е. получится что на самом деле JavaScript будет видет эту запись следующим образом:
При вычислениях или отображении чисел с дробной частью необходимо всегда указывать точность, с которой это необходимо делать.
Например, сравнить числа до 2 знаков после запятой используя методы toFixed() и toPrecision() :
Основные математические операции
Кроме этого в JavaScript есть комбинированные операторы: x+=y ( x=x+y ), x-=y ( x=x-y ), x*=y ( x=x*y ), x/=y ( x=x/y ), x%=y ( x=x%y ).
Как вы проверяете, что число NaN в JavaScript?
Я только пробовал это в консоли JavaScript Firefox, но ни один из следующих операторов не возвращает true:
29 ответов
попробуйте этот код:
для проверки, является ли любой значение NaN, а не просто числа, см. здесь:как вы тестируете NaN в Javascript?
Я только что наткнулся на эту технику в книге Эффективный JavaScript Это довольно просто:
поскольку NaN является единственным значением JavaScript, которое рассматривается как неравное самому себе, вы всегда можете проверить, является ли значение NaN, проверив его на равенство самому себе:
не понимал этого, пока @allsyed не прокомментировал, но это в спецификации ECMA:https://tc39.github.io/ecma262/#sec-isnan-number
используйте этот код:
для общего подхода, который работает для всех типов в JS, мы можем использовать любое из следующего:
Для Пользователей ECMAScript-5:
для людей, использующих ECMAScript-6:
и для целей согласованности в ECMAScript 5 & 6 мы также можем использовать это polyfill для номера.isNan
пожалуйста, проверьте Ответ для получения более подробной информации.
NaN-это специальное значение, которое не может быть проверено таким образом. Интересная вещь, которую я просто хотел поделиться, это
Это возвращает true только для значений NaN и является безопасным способом тестирования. Определенно должен быть обернут в функцию или по крайней мере прокомментирован, потому что не имеет смысла, очевидно, проверять, не равна ли одна и та же переменная друг другу, хе-хе.
вы должны использовать global isNaN(value) вызов функции, потому что:
Я надеюсь, что это поможет вам.
по состоянию на ES6, Object.is(..) это новая утилита, которая может использоваться для проверки двух значений для абсолютного равенства:
чтобы исправить проблему, где ‘1.2geoff’ анализируется, просто используйте парсер.
и это охватывает, казалось бы, все. Я протестированные на 90% медленнее, чем лодашь по _.isNaN но тогда это не покрывает всех НАН:
чтобы быть ясным, мой заботится о человеческой буквальной интерпретации чего-то, что» не является числом», а лодаш заботится о компьютерной буквальной интерпретации проверки, если что-то»NaN».
в то время как ответ @chiborg правильный, есть еще кое-что, что следует отметить:
точка, если вы используете этот метод для проверки ввода, результат будет довольно либеральным.
Простое Решение!
действительно супер просто! Сюда! Этот способ!
использовать так же просто, как:
также: см. ниже 1-й пример для пары альтернативных реализации.
пример:
есть несколько альтернативных путей, которые вы берете для реализации, если вы не хотите использовать альтернативно названный метод и хотели бы убедиться, что он более глобально доступен. предупреждение эти решения включают изменение собственных объектов и могут быть не лучшим решением. Всегда будьте осторожны и помните, что другие библиотеки вы можете использовать may в зависимости от собственного кода или аналогичных изменений.
Альтернативная Реализация 1: Заменить Native isNaN метод.
альтернативная реализация 2: Добавление к объекту Number
*предложено, поскольку это также Поли-заполнение для ECMA 5 до 6
альтернативным решением проверить, если пусто
простой метод окна я написал этот тест, если объект пустой. Это немного отличается тем, что он не дает если элемент «точно» Нана, но я решил, что брошу это, поскольку это также может быть полезно при поиске пустых предметов.
пример:
Чрезвычайно Глубокая Проверка, Если Пуст
этот последний идет немного глубоко, даже проверяя, полон ли объект пустых объектов. Я уверен в этом. имеет место для улучшения и возможных ям, но до сих пор, похоже, ловит почти все.
Итак, в поддерживаемых средах ECMA Script 2015 Вы можете использовать
NaN в JavaScript означает «не число», хотя его тип на самом деле является числом.
чтобы проверить, имеет ли переменная значение NaN, мы не можем просто использовать функцию isNaN (), потому что isNaN () имеет следующую проблему, см. ниже:
на самом деле здесь происходит то, что myVar неявно принуждается к числу:
это действительно имеет смысл, потому что» а » на самом деле не число. Но на самом деле мы хотим проверить, действительно ли myVar в значение NaN.
так что isNaN () не может помочь. Тогда что же нам делать?
Кажется, что isNaN() не поддерживается в узел.js из коробки.
Я работал с
Я просто хочу поделиться другой альтернативой, это не обязательно лучше, чем другие здесь, но я думаю, что стоит посмотреть:
Я сделал быстрый тест, и он работает так же хорошо, как Number.isNaN и как проверка против себя ложные. Все трое выступают лучше, чем isNan
может быть полезным, если вы хотите чтобы избежать сломанной
оператор равенства (==и ===) не может использоваться для проверки значения на NaN.
лучший способ-использовать » isNaN ()», который является функцией buit-in для проверки NaN. Все браузеры поддерживают путь..
Как проверить, является ли число NaN в JavaScript?
Я пробовал это только в консоли JavaScript Firefox, но ни одно из следующих утверждений не возвращает true:
Попробуйте этот код:
Для проверки, является ли какое-либо значение NaN, а не просто числами, смотрите здесь: Как вы проверяете NaN в Javascript?
Я только что столкнулся с этой техникой в книге « Эффективный JavaScript», которая довольно проста:
Поскольку NaN является единственным значением JavaScript, которое рассматривается как неравное для себя, вы всегда можете проверить, является ли значение NaN, проверив его на равенство с самим собой:
Не осознавал этого, пока @allsyed не прокомментировал, но это в спецификации ECMA: https://tc39.github.io/ecma262/#sec-isnan-number
Используйте этот код:
Поскольку значение типа Number должно быть проверено, является ли оно NaN или нет, глобальная функция isNaN будет делать работу
Для общего подхода, который работает для всех типов в JS, мы можем использовать любое из следующего:
Для пользователей ECMAScript-5:
Для людей, использующих ECMAScript-6:
И в целях обеспечения согласованности в ECMAScript 5 и 6, мы также можем использовать этот polyfill для Number.isNan
пожалуйста, проверьте этот ответ для более подробной информации.
Это возвращает истину только для значений NaN и является безопасным способом тестирования. Должен определенно быть обернут в функцию или, по крайней мере, прокомментирован, потому что, очевидно, нет смысла проверять, не совпадают ли одна и та же переменная, хе-хе.
Вы должны использовать isNaN(value) вызов глобальной функции, потому что:
Я надеюсь, что это поможет вам.
Чтобы исправить проблему с ‘1.2geoff’ анализом, просто используйте Number() вместо этого анализатор.
И это охватывает, казалось бы, все. Я оценил его на 90% медленнее, чем у Лодаша, _.isNaN но тогда он не охватывает все NaN:
Просто чтобы прояснить, моя заботится о человеческой буквальной интерпретации чего-то, что является «Не числом», а Лодаш заботится о компьютерной буквальной интерпретации проверки, является ли что-то «NaN».
Хотя ответ @chiborg является верным, следует отметить следующее:
Суть в том, что если вы используете этот метод для проверки ввода, результат будет довольно либеральным.
Простое решение!
ДЕЙСТВИТЕЛЬНО супер просто! Вот! Есть этот метод!
Используйте так же просто, как:
Также: см. Ниже 1-й пример для пары альтернативных реализаций.
Пример:
Есть несколько альтернативных путей, которые вы выбираете для реализации, если вы не хотите использовать метод с альтернативным именем и хотели бы обеспечить его глобальную доступность. Предупреждение Эти решения включают изменение собственных объектов и могут быть не самым лучшим решением. Всегда соблюдайте осторожность и помните, что другие библиотеки, которые вы можете использовать, могут зависеть от собственного кода или аналогичных изменений.
Альтернативная реализация 1: Заменить собственный isNaN метод.
Альтернативная реализация 2: добавление к объекту нумерации * Предложено, так
как оно также является полизаполнением для ECMA 5-6
Проверка альтернативного раствора, если она пуста
Пример:
Очень глубокая проверка, если пуст
Этот последний идет немного глубже, даже проверяя, заполнен ли объект пустыми объектами. Я уверен, что в нем есть место для улучшений и возможных ям, но пока что, похоже, ловит почти все.
Я просто хочу поделиться другой альтернативой, она не обязательно лучше, чем у других здесь, но я думаю, что стоит посмотреть:
Я сделал быстрый тест, и он работает так же хорошо, как Number.isNaN и проверяет себя на ложность. Все три работают лучше, чем isNan
Может стать полезным, если вы хотите избежать нарушения isNaN функции.
Итак, в средах, поддерживаемых ECMA Script 2015, вы можете использовать
Чтобы проверить, имеет ли переменная значение NaN, мы не можем просто использовать функцию isNaN (), потому что isNaN () имеет следующую проблему, см. Ниже:
Здесь действительно происходит то, что myVar неявно приводится к числу:
Это действительно имеет смысл, потому что «А» на самом деле не число. Но мы действительно хотим проверить, действительно ли myVar имеет значение NaN.
Так что isNaN () не может помочь. Тогда что мы должны делать вместо этого?
В свете того, что NaN является единственным значением JavaScript, которое обрабатывается неравномерно для самого себя, мы можем проверить его равенство самому себе, используя! ==