Я пробовал это только в консоли JavaScript Firefox, но ни одно из следующих утверждений не возвращает true:
parseFloat('geoff') == NaN;
parseFloat('geoff') == Number.NaN;
javascript
nan
Пол Д. Уэйт
источник
источник
Ответы:
Попробуйте этот код:
Для проверки, является ли какое-либо значение NaN, а не просто числами, смотрите здесь: Как вы проверяете NaN в Javascript?
источник
NaN
, тогда да. (Я не говорю, что вы всегда будете.)isNaN(parseFloat("geoff")) // true
isNaN(parseFloat("10geo")) // false
Как это полезно?Я только что столкнулся с этой техникой в книге « Эффективный JavaScript», которая довольно проста:
Поскольку NaN является единственным значением JavaScript, которое рассматривается как неравное для себя, вы всегда можете проверить, является ли значение NaN, проверив его на равенство с самим собой:
Не осознавал этого, пока @allsyed не прокомментировал, но это в спецификации ECMA: https://tc39.github.io/ecma262/#sec-isnan-number
источник
Используйте этот код:
Смотрите
isNaN()
документы по MDN .источник
var value = 0/0;
иvar value2= String("123 131");
создавать значения NaN, и что-то вроде этогоvar value3 = "abcd";
также является значением NaN.Поскольку значение типа Number должно быть проверено, является ли оно
NaN
или нет, глобальная функцияisNaN
будет делать работуДля общего подхода, который работает для всех типов в JS, мы можем использовать любое из следующего:
Для пользователей ECMAScript-5:
Для людей, использующих ECMAScript-6:
И в целях обеспечения согласованности в ECMAScript 5 и 6, мы также можем использовать этот polyfill для Number.isNan
пожалуйста, проверьте этот ответ для более подробной информации.
источник
isNaN
сначала преобразует аргумент в числовое значение.NaN - это особая ценность, которую нельзя так проверить. Интересно, что я просто хотел поделиться этим
Это возвращает истину только для значений NaN и является безопасным способом тестирования. Должен определенно быть обернут в функцию или, по крайней мере, прокомментирован, потому что, очевидно, нет смысла проверять, не совпадают ли одна и та же переменная, хе-хе.
источник
Вы должны использовать
isNaN(value)
вызов глобальной функции, потому что:Примеры:
Я надеюсь, что это поможет вам.
источник
isNaN('') //false
ноparseInt('') //NaN
. То же самое можно сказать и дляnull
.Начиная с ES6 ,
Object.is(..)
это новая утилита, которую можно использовать для проверки двух значений на абсолютное равенство:источник
Чтобы исправить проблему с
'1.2geoff'
анализом, просто используйтеNumber()
вместо этого анализатор.Итак, а не это:
Сделай это:
РЕДАКТИРОВАТЬ: я только что заметил еще одну проблему из этого, хотя ... ложные значения (и true, как настоящий логический) передаются в
Number()
качестве0
! В этом случае ... parseFloat работает каждый раз вместо этого. Итак, вернемся к этому:И это охватывает, казалось бы, все. Я оценил его на 90% медленнее, чем у Лодаша,
_.isNaN
но тогда он не охватывает все NaN:http://jsperf.com/own-isnan-vs-underscore-lodash-isnan
Просто чтобы прояснить, моя заботится о человеческой буквальной интерпретации чего-то, что является «Не числом», а Лодаш заботится о компьютерной буквальной интерпретации проверки, является ли что-то «NaN».
источник
Хотя ответ @chiborg является верным, следует отметить следующее:
Суть в том, что если вы используете этот метод для проверки ввода, результат будет довольно либеральным.
Итак, да, вы можете использовать
parseFloat(string)
(или в случае полных чиселparseInt(string, radix)
), а затем обернуть это с помощьюisNaN()
, но будьте внимательны с полученными числами, переплетенными с дополнительными нечисловыми символами.источник
parseFloat('test1.2')
вернетсяNaN
.Простое решение!
ДЕЙСТВИТЕЛЬНО супер просто! Вот! Есть этот метод!
Используйте так же просто, как:
Пример:
Есть несколько альтернативных путей, которые вы выбираете для реализации, если вы не хотите использовать метод с альтернативным именем и хотели бы обеспечить его глобальную доступность. Предупреждение Эти решения включают изменение собственных объектов и могут быть не самым лучшим решением. Всегда соблюдайте осторожность и помните, что другие библиотеки, которые вы можете использовать, могут зависеть от собственного кода или аналогичных изменений.
Альтернативная реализация 1: Заменить собственный
isNaN
метод.Альтернативная реализация 2: добавление к объекту нумерации * Предложено, так
как оно также является полизаполнением для ECMA 5-6
Проверка альтернативного раствора, если она пуста
Простой метод окна я написал этот тест, если объект пуст . Это немного отличается тем, что не дает, если элемент «точно» NaN , но я решил, что это будет важно, так как это может быть полезно при поиске пустых элементов.
Пример:
Показать фрагмент кода
Очень глубокая проверка, если пуст
Этот последний идет немного глубже, даже проверяя, заполнен ли объект пустыми объектами. Я уверен, что в нем есть место для улучшений и возможных ям, но пока что, похоже, ловит почти все.
Показать фрагмент кода
источник
isNaN
как не является надежным. Там меня прокомментировали и сказали, что этот вопрос лучше подойдет для моего ответа, поэтому перенес его сюда. Просто добавьте что-нибудь полезное / полезное в связи с этой проблемой, которая появится в поиске Google по данной проблемеis it NaN?
. С другой стороны, мой ответ будет более точным, чем выбранный ответ.Я просто хочу поделиться другой альтернативой, она не обязательно лучше, чем у других здесь, но я думаю, что стоит посмотреть:
Логика заключается в том, что каждое число, кроме
0
иNaN
приведено кtrue
.Я сделал быстрый тест, и он работает так же хорошо, как
Number.isNaN
и проверяет себя на ложность. Все три работают лучше, чемisNan
Результаты
Может стать полезным, если вы хотите избежать нарушения
isNaN
функции.источник
Если ваша среда поддерживает ECMAScript 2015 , вы можете использовать
Number.isNaN
ее, чтобы убедиться, что значение действительноNaN
.Проблема в
isNaN
том, что , если вы используете это с нечисловыми данными, применяется несколько непонятных правил (согласно MDN). Например,Итак, в средах, поддерживаемых ECMA Script 2015, вы можете использовать
источник
isNaN
может привести к неприятностям, и не забывайте использоватьNumber.isNaN
в средах ECMAScript 2015 :-)NaN в JavaScript означает «не число», хотя на самом деле его тип - число.
Чтобы проверить, имеет ли переменная значение NaN, мы не можем просто использовать функцию isNaN (), потому что isNaN () имеет следующую проблему, см. Ниже:
Здесь действительно происходит то, что myVar неявно приводится к числу:
Это действительно имеет смысл, потому что «А» на самом деле не число. Но мы действительно хотим проверить, действительно ли myVar имеет значение NaN.
Так что isNaN () не может помочь. Тогда что мы должны делать вместо этого?
В свете того, что NaN является единственным значением JavaScript, которое обрабатывается неравномерно для самого себя, мы можем проверить его равенство самому себе, используя! ==
Таким образом, чтобы заключить , что если это правда, что переменная! == сама, то эта переменная точно имеет значение NaN:
источник
Я использую функцию подчеркивания,
isNaN
потому что в JavaScript:По крайней мере, помните об этом.
источник
undefined
будет некорректным поведением? Это правда, чтоundefined
это не число, не так ли?undefined
может быть чем-то инымNaN
, но это не число, поэтомуisNaN(undefined)
должно быть (и есть)true
Возможно также это:
источник
Кажется, что isNaN () не поддерживается в Node.js из коробки.
Я работал с
источник
источник
Посмотрите на документацию Mozilla . Глобальное свойство NaN - это значение, представляющее Not-A-Numbe.
Лучший способ - использовать функцию isNaN (), которая является встроенной функцией для проверки NaN. Все браузеры поддерживают способ ..
источник
Правило таково:
Проблема функции isNaN () в том, что она может возвращать неожиданный результат в некоторых случаях:
Лучший способ проверить, действительно ли значение NaN:
источник
Согласно IEEE 754 все отношения с участием NaN оцениваются как ложные, кроме! =. Таким образом, например, (A> = B) = false и (A <= B) = false, если A или B или оба являются / являются NaN.
источник
Я написал этот ответ на другой вопрос о StackOverflow, когда другой проверяет, когда,
NaN == null
но затем он был отмечен как дубликат, поэтому я не хочу тратить свою работу.Посмотрите на Сеть разработчиков Mozilla о
NaN
.Короткий ответ
Просто используйте,
distance || 0
когда вы хотите убедиться, что вы цените правильное число илиisNaN()
проверить его.Длинный ответ
NaN (Not-a-Number) - это странный глобальный объект в javascript, часто возвращаемый при сбое какой-либо математической операции.
Вы хотели проверить,
NaN == null
какие результатыfalse
. Hovewer дажеNaN == NaN
результаты сfalse
.Простой способ узнать, является ли переменная
NaN
глобальной функциейisNaN()
.Другое,
x !== x
которое верно только тогда, когда х является NaN. (спасибо, что напомнили @ Raphael-Schweikert)Но почему короткий ответ сработал?
Давайте выясним.
Когда вы звоните,
NaN == false
результатfalse
, то же самое сNaN == true
.Где-то в спецификациях JavaScript есть запись с всегда ложными значениями, которая включает в себя:
NaN
- не номер""
- пустой строкойfalse
- логическое значение falsenull
- нулевой объектundefined
- неопределенные переменные0
- числовое 0, включая +0 и -0источник
var xIsNaN = x !== x;
это дает истину, только если х естьNaN
.Другое решение упомянуто на странице parseFloat MDN
Он обеспечивает функцию фильтра для строгого анализа
И тогда вы можете использовать,
isNaN
чтобы проверить, если этоNaN
источник
Точный способ проверить это:
источник
Я создал эту маленькую функцию, которая работает как шарм. Вместо того, чтобы проверять NaN, который кажется нелогичным, вы проверяете число. Я уверен, что я не первый, кто делает это таким образом, но я думал, что поделюсь.
источник
Нашел другой способ, просто для удовольствия.
источник
Ответ Марксизма работает хорошо, но он не возвращает ложь для
Infinity
поскольку Бесконечность технически не число.я придумал
isNumber
функцию, которая будет проверять, является ли это число.ОБНОВЛЕНИЕ: я заметил, что этот код не работает для некоторых параметров, поэтому я сделал его лучше.
источник
Это не элегантно. но после попытки isNAN () я пришел к этому решению, которое является другой альтернативой. В этом примере я также разрешил '.' потому что я маскируюсь для поплавка. Вы также можете отменить это, чтобы убедиться, что номера не используются.
Это односимвольная оценка, но вы также можете просмотреть строку для проверки любых чисел.
источник
Вы можете проверить NaN, используя функцию javascript isNaN. Просто передав число или значение в функцию isNaN
источник
Просто конвертируйте результат в строку и сравните с NaN.
источник
Является ли (NaN> = 0) ? ...... " Я не знаю ".
Условия выполняются только если ИСТИНА .
Не на ЛОЖЬ .
Не на " Я не знаю ".
источник