Как проверить что переменная равна nan
Форум
Справочник
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.
NaN в JavaScript
Дата публикации: 2020-02-06
От автора: В данной статье мы познакомимся со специальным свойством NaN (Not-A-Number), которое является значением, представляющим не-число.
Тип числа в JavaScript содержит целые числа и числа с плавающей запятой:
Плюс есть два специальных числовых значения: Infinity (число больше, чем любое другое число) и NaN (представляющее концепцию «не число»):
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Хотя непосредственная работа с NaN редко встречается, оно может неожиданно появиться после неудачной операции с числами.
Давайте подробно рассмотрим специальное значение NaN: как проверить, содержит ли переменная NaN, и сценарии, которые в которых генерируется значения «не число».
1. Число NaN
Тип числа в JavaScript — это набор всех числовых значений, включая «не число», положительную бесконечность и отрицательную бесконечность.
«Not A Number» можно получить с помощью специального выражения NaN или как свойство глобального объекта или функции Number:
«Не число» — это значение, которое не представляет действительное число, несмотря на то, что оно имеет тип числа. Через NaN полезно представлять ошибочные операции с числами. Например, умножение числа на undefined не является допустимой операцией, поэтому дает NaN:
Также попытка разобрать недопустимую числовую строку, например, ‘Joker’ приводит к NaN:
2. Проверка на равенство с NaN
Интересным свойством NaN является то, что оно не равно ни одному значению, даже самому себе:
Это поведение полезно для определения, является ли переменная NaN:
Разница между этими функциями заключается в том, что Number.isNaN() не преобразуется свой аргумент в число:
isNaN(‘Joker12′) преобразует аргумент ‘Joker12′ в число, которое является NaN. Таким образом, функция возвращает true.
С другой стороны, Number.isNaN(‘Joker12′) проверяет аргумент без преобразования. Функция возвращает false, потому ‘Joker12′ не равно NaN.
3. Операции, дающие NaN
3.1 Парсинг чисел
В JavaScript вы можете преобразовать числовые строки в числа. Например, вы можете легко преобразовать строку ’1.5′ в число с плавающей запятой 1.5:
Когда строка не может быть преобразована в число, функция синтаксического анализа возвращает NaN: указывая, что синтаксический анализ не выполнен. Вот некоторые примеры:
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
При парсинге чисел рекомендуется проверить, не является ли результат парсинга NaN:
Парсинг inputToParse не удался, поэтому parseInt(inputToParse, 10) возвращается NaN. Условие if (isNaN(number)) оценивается, как true, и 0 назначается number.
3.2 undefined в качестве операнда
При использовании undefined в качестве операнда в арифметических операциях, таких как сложение, умножение и т д. мы получаем NaN. Например:
getFontSize() — это функция, которая обращается к свойству fontSize из объекта стиля. При вызове getFontSize(< size: 16 >) результатом будкт undefined (свойство fontSize не существует в объекте < size: 16 >). fontSize * 2 оценивается как undefined * 2, что дает NaN.
«Not A Number» генерируется, когда в качестве значения в арифметических операциях используется отсутствующее свойство или функция, возвращающая undefined. Отсутствие undefined в арифметических операциях — это хороший способ предотвратить получение NaN.
3.3 NaN как операнд
Значение NaN также генерируется, когда операндом в арифметических операциях является NaN:
NaN распространяется на арифметические операции:
Операции с переменной result прерываются после добавления к result значения invalidNumber (которое является NaN).
3.4 Неопределенные формы
Значение NaN создается, когда арифметические операции имеют неопределенные формы. Деление 0 / 0 и Inifinity / Infinity:
Умножение 0 и Infinity:
Сложение бесконечных чисел с разными знаками:
3.5 Неверные аргументы математических функций
Квадратный корень из отрицательного числа:
Или логарифм отрицательного числа:
4. Заключение
Понятие «не число», выраженное в JavaScript с помощью NaN, полезно для представления ошибочных операций над числами. NaN не равно ни одному значению, даже самому себе. Рекомендуемый способ проверить, содержит ли переменная NaN — использовать Number.isNaN(value).
Преобразование числовых строк в числа, в случае неудачи может дать NaN. Рекомендуется проверять, не возвращают ли parseInt(), parseFloat() или Number() NaN.
Если undefined или NaN используются в качестве операнда в арифметических операциях, это обычно приводит к NaN. Правильная обработка undefined (предоставление значений по умолчанию для отсутствующих свойств) является рекомендованным подходом для предотвращения этой ситуации.
Неопределенные формы или недопустимые аргументы для математических функций также приводят получению NaN. Но это случается редко. Вот мой практический совет: «Получили NaN? Ищите undefined!»
Автор: Dmitri Pavlutin
Редакция: Команда webformyself.
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Как проверить, является ли число NaN в JavaScript?
Я пробовал это только в консоли JavaScript Firefox, но ни одно из следующих утверждений не возвращает true:
30 ответов
Попробуйте этот код:
Чтобы проверить, является ли значение любого значением NaN, а не просто числом, см. Здесь: Как проверить NaN в Javascript?
Вы можете проверить NaN, используя функцию javascript isNaN. Просто передав число или значение в функцию isNaN
ОБНОВЛЕНИЕ: я заметил, что этот код не работает для некоторых параметров, поэтому я сделал его лучше.
Проблема функции isNaN () в том, что она может возвращать неожиданный результат в некоторых случаях:
Лучший способ проверить, действительно ли значение NaN:
Простое решение!
ДЕЙСТВИТЕЛЬНО супер просто! Вот! Есть этот метод!
Используйте так же просто, как:
Также: см. Ниже 1-й пример для пары альтернативных реализаций.
Примере:
Есть несколько альтернативных путей, которые вы выбираете для реализации, если вы не хотите использовать метод с альтернативным именем и хотите, чтобы он был более глобально доступным. Предупреждение . Эти решения включают изменение собственных объектов и могут быть не лучшим решением. Всегда соблюдайте осторожность и помните, что другие библиотеки, которые вы можете использовать, могут зависеть от собственного кода или подобных изменений.
Альтернативная реализация 2: Добавить к объекту нумерации
* Рекомендуется, так как он также является поли-заполнением для ECMA 5-6
Альтернативное решение проверить, если пусто
Примере:
Очень глубокая проверка, если пуст
Этот последний идет немного глубже, даже проверяя, заполнен ли объект пустыми объектами. Я уверен, что здесь есть место для улучшений и возможных ям, но пока что, похоже, ловит почти все.
Используйте этот код:
Точный способ проверить это:
Я только что столкнулся с этой техникой в книге Эффективный JavaScript, которая довольно проста:
Поскольку NaN является единственным значением JavaScript, которое рассматривается как неравное для себя, вы всегда можете проверить, является ли значение NaN, проверив его на равенство с самим собой:
Не осознавал этого, пока @allsyed не прокомментировал, но это в спецификации ECMA: https: //tc39.github.io/ecma262/#sec-isnan-number
Просто конвертируйте результат в строку и сравните с NaN.
Поскольку значение типа Number необходимо проверить, является ли оно <
Для общего подхода, который работает для всех типов в JS, мы можем использовать любое из следующего:
Для пользователей ECMAScript-5:
Для людей, использующих ECMAScript-6:
И для обеспечения согласованности в ECMAScript 5 и 6 мы также можем использовать этот полифил для Number.isNan
Проверьте этот ответ для получения дополнительной информации.
Хотя ответ @chiborg верен, стоит отметить еще кое-что:
Дело в том, что если вы используете этот метод для проверки ввода, результат будет довольно либеральным.
Чтобы устранить проблему, при которой ‘1.2geoff’ анализируется, просто используйте вместо этого Number() синтаксический анализатор.
И это охватывает, казалось бы, все. Я оценил его на 90% медленнее, чем _.isNaN Лодаша, но тогда он не охватывает все NaN:
Просто чтобы быть ясным, моя заботится о человеческой буквальной интерпретации чего-то, что является «не числом», а lodash заботится о компьютерной буквальной интерпретации проверки, является ли что-то «NaN».
Чтобы проверить, имеет ли переменная значение NaN, мы не можем просто использовать функцию isNaN (), потому что isNaN () имеет следующую проблему, см. Ниже:
Здесь действительно происходит то, что myVar неявно приводится к числу:
Это действительно имеет смысл, потому что «А» на самом деле не число. Но мы действительно хотим проверить, действительно ли myVar имеет значение NaN.
Так что isNaN () не может помочь. Тогда что мы должны делать вместо этого?
В свете того, что NaN является единственным значением JavaScript, которое обрабатывается неравномерно для самого себя, мы можем проверить его равенство самому себе, используя! ==
Я создал эту маленькую функцию, которая работает как шарм. Вместо того, чтобы проверять NaN, который кажется нелогичным, вы проверяете число. Я уверен, что я не первый, кто делает это таким образом, но я думал, что поделюсь.
Короткий ответ
Длинный ответ
Но почему короткий ответ сработал?
Где-то в спецификациях JavaScript есть запись с всегда ложными значениями, которая включает в себя:
Не на » Я не знаю «.
Оператор равенства (== и ===) нельзя использовать для проверки значения с NaN.
Итак, в средах, поддерживаемых ECMA Script 2015, вы можете использовать
Это не элегантно. но после попытки isNAN () я пришел к этому решению, которое является другой альтернативой. В этом примере я также разрешил ‘.’ потому что я маскируюсь для поплавка. Вы также можете отменить это, чтобы убедиться, что номера не используются.
Это односимвольная оценка, но вы также можете просмотреть строку для проверки любых чисел.
Другое решение упоминается на странице MDN parseFloat
Он обеспечивает функцию фильтра для строгого анализа
Это возвращает true только для значений NaN и является безопасным способом тестирования. Должно определенно быть заключено в функцию или, по крайней мере, прокомментировано, потому что, очевидно, нет смысла проверять, не совпадают ли одна и та же переменная, хе-хе.
По крайней мере, помните об этом.
Согласно IEEE 754 все отношения с участием NaN оцениваются как ложные, кроме! =. Таким образом, например, (A> = B) = false и (A 1
Нашел другой способ, просто для удовольствия.
Как вы проверяете, что число является NaN в JavaScript?
Я пробовал это только в консоли JavaScript Firefox, но ни одно из следующих утверждений не возвращает true:
Попробуйте этот код:
Чтобы проверить, является ли значение any значением 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
пожалуйста, проверьте этот ответ для более подробной информации.
Это возвращает true only для значений NaN и является безопасным способом тестирования. Должно определенно быть заключено в функцию или хотя бы прокомментировано, потому что, очевидно, нет особого смысла проверять, не совпадают ли одна и та же переменная, хе-хе.
Я надеюсь, что это поможет вам.
И это охватывает, казалось бы, все. Я тестировал его на 90% медленнее, чем _.isNaN от lodash, но тогда он не охватывает все NaN:
Просто чтобы прояснить, моя заботится о человеческой буквальной интерпретации чего-то, что является «не числом», а lodash заботится о компьютерной буквальной интерпретации проверки, является ли что-то «NaN».
Хотя ответ @chiborg IS правильный, есть еще кое-что, что следует отметить:
Суть в том, что если вы используете этот метод для проверки ввода, результат будет довольно либеральным.
Простое решение!
ДЕЙСТВИТЕЛЬНО супер просто! Вот! Есть этот метод!
Используйте так же просто, как:
Также: см. Ниже 1-й пример для пары альтернативных реализаций.
Пример:
Есть несколько альтернативных путей, которые вы выбираете для реализации, если вы не хотите использовать метод с альтернативным именем и хотели бы обеспечить его глобальную доступность. Предупреждение Эти решения включают изменение собственных объектов и, возможно, не являются вашим лучшим решением. Всегда соблюдайте осторожность и помните, что другие библиотеки, которые вы можете использовать, могут зависеть от собственного кода или подобных изменений.
Альтернативная реализация 2: добавление к объекту номера
* Предложено, поскольку это также поли-заполнение для ECMA 5 до 6
Альтернативное решение проверить, если пуст
Пример:
Очень глубокая проверка, если пуст
Этот последний идет немного глубже, даже проверяя, заполнен ли объект пустыми объектами. Я уверен, что в нем есть место для улучшений и возможных ям, но пока что, похоже, ловит почти все.
Итак, в средах, поддерживаемых ECMA Script 2015, вы можете использовать
По крайней мере, будьте в курсе этого гоча.
Чтобы проверить, имеет ли переменная значение NaN, мы не можем просто использовать функцию isNaN (), потому что isNaN () имеет следующую проблему, см. Ниже:
Здесь действительно происходит то, что myVar неявно приводится к числу:
Это действительно имеет смысл, потому что «А» на самом деле не число. Но мы действительно хотим проверить, действительно ли myVar имеет значение NaN.
Так что isNaN () не может помочь. Тогда что мы должны делать вместо этого?
Как проверить, что число NaN в JavaScript?
Я пробовал это только в консоли Firefox JavaScript, но ни одно из следующих утверждений не возвращает true:
25 ответов
float(‘nan’) приводит к Nan (не число). Но как я могу это проверить? Это должно быть очень легко, но я не могу найти его.
Попробуйте этот код:
Чтобы проверить, является ли какое- либо значение NaN, а не просто числами, см. Здесь: Как вы проверяете NaN в Javascript?
Я только что наткнулся на эту технику в книге Effective 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 мы также можем использовать этот полифилл для Number.isNan
пожалуйста, проверьте Этот ответ для получения более подробной информации.
NaN-это особое значение, которое не может быть проверено подобным образом. Интересная вещь, которой я просто хотел поделиться, заключается в следующем
Это возвращает значение true только для значений NaN и является безопасным способом тестирования. Определенно должно быть завернуто в функцию или, по крайней мере, прокомментировано, потому что, очевидно, нет особого смысла проверять, не равна ли одна и та же переменная друг другу, хе-хе.
Я надеюсь, что это вам поможет.
Так что вместо этого:
Просто для ясности, мой заботится о буквальной интерпретации человеком чего-то, что является «Not a Number», а lodash заботится о компьютерной буквальной интерпретации проверки, является ли что-то «NaN».
Хотя ответ @chiborg IS правильный, есть еще кое-что, что следует отметить:
Дело в том, что если вы используете этот метод для проверки входных данных, результат будет довольно либеральным.
NaN в JavaScript означает «Не число», хотя его тип на самом деле является числом.
Чтобы проверить, имеет ли переменная значение NaN, мы не можем просто использовать функцию isNaN(), потому что isNaN() имеет следующую проблему, см. Ниже:
На самом деле здесь происходит то, что myVar неявно принуждается к числу:
Это действительно имеет смысл, потому что «A» на самом деле не является числом. Но на самом деле мы хотим проверить, действительно ли myVar имеет значение NaN.
Так что isNaN() не может помочь. Тогда что же нам делать вместо этого?
Таким образом, в средах, поддерживаемых ECMA Script 2015, вы можете использовать
Простое решение!
REALLY супер просто! Сюда! Есть такой метод!
Использовать так просто, как:
Также: См. Ниже 1-й пример для нескольких альтернативных реализаций.
Пример:
Есть несколько альтернативных путей, которые вы используете для реализации, если вы не хотите использовать метод с альтернативным именем и хотели бы убедиться, что он более глобально доступен. Предупреждение Эти решения включают в себя изменение собственных объектов и могут быть не лучшим решением. Всегда будьте осторожны и помните, что другие библиотеки, которые вы можете использовать, могут зависеть от собственного кода или аналогичных изменений.
Альтернативная реализация 2: Добавьте к номеру объект
*Suggested, так как он также является поли-заливкой для ECMA от 5 до 6
Альтернативный тест решения, если он пустой
Пример:
Чрезвычайно Глубокая Проверка, Если Пусто
Этот последний немного углубляется, даже проверяя, заполнен ли объект пустыми объектами. Я уверен, что у него есть место для улучшения и возможных ям, но пока, похоже, он улавливает почти все.
По крайней мере, знай, что ты попался.
Я просто хочу поделиться другой альтернативой, она не обязательно лучше, чем другие здесь, но я думаю, что на нее стоит посмотреть:
Похоже, что isNaN() не поддерживается в Node.js из коробки.
Я работал с
Оператор равенства (== и ===) не может использоваться для проверки значения на соответствие NaN.
Лучший способ-использовать ‘isNaN()’, который является функцией buit-in для проверки NaN. Все браузеры поддерживают этот способ..
Проблема функции isNaN() заключается в том, что в некоторых случаях она может возвращать неожиданный результат:
Лучший способ проверить, действительно ли значение NaN:
Короткий ответ
Длинный ответ
Но почему короткий ответ сработал?
Где-то в спецификациях JavaScript есть запись с всегда ложными значениями, которая включает в себя:
Другое решение упомянуто на странице MDN parseFloat
Он предоставляет функцию фильтра для строгого синтаксического анализа
Нашел другой способ, просто для развлечения.
Точный способ проверить это:
UPDATE: я заметил, что этот код не работает для некоторых параметров, поэтому я сделал его лучше.
Похожие вопросы:
Допустим, я хочу преобразовать строку, которая, очевидно, не является числом, но происходит так, что в финале я получаю число!? var b = parseFloat(a); console.log(b); // output NaN.
float(‘nan’) приводит к Nan (не число). Но как я могу это проверить? Это должно быть очень легко, но я не могу найти его.
Как я могу проверить if statement, если число является значением NaN? Я думал, что это сработает 2.4.0 :003 > i = Float::NAN => NaN 2.4.0 :004 > puts hi if i hi => nil 2.4.0 :005 >.
Я все еще не понимаю, что такое NaN или a (Число, которое не является реальным числом). Основные вопросы: Что такое значение NaN или NaN точно (по словам профессора, не являющегося математиком).