Progress-servis55.ru

Новости из мира ПК
4 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Javascript проверка на nan

Форум

Справочник

Поиск по форуму
Расширенный поиск
К странице.

Илья Кантор, 10 мая 2009 — 21:42

isNaN

Синтаксис

Аргументы

Описание, примеры

Метод isNaN пытается преобразовать переданный параметр в число. Если параметр не может быть преобразован, возвращает true , иначе возвращает false .

Эта функция полезна, так как значение NaN не может быть проверено операторами эквивалентности.

Значение x == NaN и x === NaN всегда false для любого x , даже если x=NaN .

а NaN это строковое значение или какое? как на него проверять без функции isNaN?
можно так обратиться if (val == «NaN») или только if (val == NaN) ?

NaN — это специальное значение. Без функции isNaN проверить нельзя, == не сработает.

самая банальная проверка на NaN это: NaN == NaN всегда будет false
т.е. переменная не равна сама себе
var a = NaN;
isNaN(a) // true
a!=a // true

лучше не пользоваться isNaN, поскольку передаваемое в функцию значение, не всегда будет преобразовываться в число:
var a = ‘test’;
isNaN(‘test’) // true .
a!=a // false

Идиот. NaN — не число

NaN — число (number) — читай доку.
typeof NaN -> «number»

Зачем тогда вообще эта функция нужна, если она строки считает NaN’ами?

Спасибо! Очень полезный сайт!

Очень нужный сайт! Никогда не догадался бы, что объязательно нужно делать так!

isNaN(») будет false

isNaN(null) также false

Проверить переменную x на NaN можно так: x !== x. Это выражение вернет true тогда и только тогда когда x есть NaN

единственный верный вариант, своего рода костыль

isMyNaN(undefined)
false
isMyNaN(‘e’)
false
isMyNaN(‘1’)
false
isMyNaN(1)
false
isMyNaN(null)
false
isMyNaN(true)
false

неверно, оно вернёт false если значение === самому себе, то есть любой символ, любая строка и любое число. Даже true вернёт false

Такая реализация более корректна — по крайней мере, отрабатывает в точности как NaN

function isMyNaN(value) <
if (value !== null) <
return parseFloat(value) !== parseFloat(value);
>
else return 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(), то.

Возвращает true, если значение s может быть преобразовано в число, иначе — false (кэп)

Тоже костыль, конечно.
Но, по крайней мере для таких значений s, как undefined, null и ‘test’ (см. выше) отработало корректно.

Как задать в функции отсутствие аргументов?

Просто так. function foo()

Метод isNaN пытается преобразовать переданный параметр в число. Если параметр не может быть преобразован, возвращает true, иначе возвращает false.

То есть получается если isNAN(число) — будет False? Может наоборот все таки?

Как вы проверяете, что число 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 мы также можем использовать это полифилл для номера.isNan

пожалуйста, проверьте Ответ для более подробной информации.

NaN-это специальное значение, которое не может быть испытан, как это. Интересная вещь, которую я просто хотел поделиться это

Это возвращает true только для значений NaN и безопасный путь испытания. Определенно следует обернуть в функцию или по крайней мере прокомментировать, потому что не имеет большого смысла, очевидно, проверять, не равна ли одна и та же переменная друг другу, хе-хе.

вы должны использовать глобальный isNaN(value) вызов функции, потому что:

  • поддерживается кросс-браузер
  • посмотреть isNaN документации

Я надеюсь, что это поможет вам.

по состоянию на ES6, Object.is(..) это новая утилита, которая может быть использована для проверки двух значений на абсолютное равенство:

чтобы исправить проблему, где ‘1.2geoff’ разбирается, просто используйте парсер.

так что вместо этого:

EDIT: я только что заметил еще одну проблему из этого, хотя. ложные значения (и true как реальное логическое значение) передаются в Number() вернуться в 0 ! В этом случае. parseFloat работает каждый раз вместо этого. Так что вернемся к этому:

и это охватывает, казалось бы, все. Я сравнил его на 90% медленнее, чем лодашь по _.isNaN но тогда это не покрывает всех НАН:

просто чтобы быть ясным, мой заботится о человеческой буквальной интерпретации чего-то, что является «не числом», а лодаш заботится о компьютерной буквальной интерпретации проверки, если что-то «NaN».

хотя ответ @chiborg верен, есть еще кое-что, что следует отметить:

суть в том, что если вы используете этот метод для подтверждения ввода, результат будет довольно либеральным.

Да, да, вы можете использовать parseFloat(string) (или в случае полного числа parseInt(string, radix) ‘ и затем впоследствии оберните это с isNaN() , но имейте в виду gotcha с числами, переплетенными с дополнительными нечисловыми символами.

Простое Решение!

действительно супер просто! Вот! Есть такой способ!

использовать так же просто, как:

Также: см. ниже 1-й пример для пары альтернативных реализации.

пример:

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

Альтернативная Реализация 1: Заменить Родной isNaN метод.

альтернативная реализация 2: Добавить к номеру объекта
*предложенный по мере того как это также Поли-заполнение для ECMA 5 до 6

альтернативным решением проверить, если пустой

простой метод окна я написал, что тест, если объект пустой. Это немного отличается в том, что он не дает, если элемент «точно» Нана, но я решил, что бросил бы это, поскольку это также может быть полезно при поиске пустых предметов.

пример:

Очень Глубокая Проверка, Если Пуст

этот последний идет немного глубоко, даже проверяя, если объект полон пустых объектов. Я в этом уверен есть место для улучшения и возможных ям, но до сих пор, кажется, поймать почти все.

если ваша среда поддерживает ECMAScript 2015, то вы можете использовать Number.isNaN чтобы убедиться, что значение действительно NaN .

Итак, в поддерживаемых средах ECMA Script 2015 Вы можете использовать

NaN в JavaScript означает «не число», хотя его тип на самом деле число.

чтобы проверить, имеет ли переменная значение NaN, мы не можем просто использовать функцию isNaN (), потому что isNaN () имеет следующую проблему, см. ниже:

на самом деле здесь происходит то, что myVar неявно принуждается к числу:

это действительно имеет смысл, потому что «а» на самом деле не число. Но то, что мы действительно хотим проверить, если myVar точно ценность НАН.

так что isNaN () не может помочь. Тогда что же нам делать вместо этого?

в свете того, что NaN является единственным значением JavaScript, которое обрабатывается неравным для себя ,поэтому мы можем проверить его равенство самому себе!= =

Итак, чтобы сделать вывод, если это правда, что переменная != = сама по себе, то эта переменная точно имеет значение NaN:

Кажется, что isNaN() не поддерживается в узел.js из коробки.
Я работал с

Я просто хочу поделиться другой альтернативой, это не обязательно лучше, чем другие здесь, но я думаю, что стоит посмотреть:

логика в том, что каждое число, кроме 0 и NaN приводятся к true .

Я сделал быстрый тест, и он работает так же хорошо, как Number.isNaN и как проверка против себя ложные. Все три работают лучше, чем isNan

может быть полезным, если вы хотите чтобы избежать сломанной

оператор равенства (==и ===) не может использоваться для проверки значения на NaN.

лучший способ-использовать ‘ isNaN ()’, который является функцией buit-in для проверки NaN. Все браузеры поддерживают путь..

Как вы проверяете, является ли число NaN в JavaScript?

Я только пробовал его в консоли JavaScript Firefox, но ни одно из следующих утверждений не возвращает true:

27 ответов

398 Решение chiborg [2010-04-16 13:58:00]

Попробуйте этот код:

Для проверки, есть ли какое-либо значение NaN, а не просто числа, см. здесь: Как вы проверяете NaN в Javascript?

94 Jazzy [2013-06-07 19:05:00]

Я просто наткнулся на эту технику в книге Эффективный JavaScript, который довольно прост:

Поскольку NaN является единственным значением JavaScript, которое рассматривается как не равное себе, вы всегда можете проверить, является ли значение NaN, проверяя его на равенство самому себе:

Не понял этого до тех пор, пока @allsyed не прокомментировал, но это в спецификации ECMA: https://tc39.github.io/ecma262/#sec-isnan-number

39 rahul [2010-04-16 13:59:00]

Используйте этот код:

29 dopeddude [2015-08-21 13:11:00]

Поскольку значение типа Number должно быть проверено, является ли оно NaN или нет, глобальная функция isNaN выполнит работу

Для общего подхода, который работает для всех типов в JS, мы можем использовать любое из следующего:

Для пользователей ECMAScript-5:

Для людей, использующих ECMAScript-6:

И для целей согласованности в ECMAScript 5 и 6 мы также можем использовать этот polyfill для Number.isNan

пожалуйста, просмотрите Этот ответ для более подробной информации.

NaN — особое значение, которое невозможно проверить таким образом. Интересная вещь, которую я просто хотел поделиться, это

Это возвращает true только для значений NaN и является безопасным способом тестирования. Должно быть обязательно завернуто в функцию или, по крайней мере, прокомментировано, потому что не имеет смысла явно проверять, не совпадает ли одна и та же переменная, хе-хе.

Вы должны использовать глобальный вызов функции isNaN(value) , потому что:

  • Поддерживается кросс-браузер
  • Смотрите isNaN для документации

Надеюсь, это поможет вам.

6 marksyzm [2014-03-17 13:57:00]

Чтобы исправить проблему, когда ‘1.2geoff’ становится разобранным, просто используйте парсер Number() .

Итак, вместо этого:

EDIT: я просто заметил еще одну проблему из этого, хотя. false значения (и true как реальное логическое значение) переданы в Number() return as 0 ! В этом случае. parseFloat работает каждый раз вместо этого. Поэтому вернемся к этому:

И это охватывает все, что угодно. Я сравнивал его на 90% медленнее, чем lodash _.isNaN , но затем он не охватывает все NaN:

Чтобы быть ясным, моя забота о человеческом буквальном толковании чего-то, что есть «Не число», и lodash заботится о компьютерной литературной интерпретации проверки того, что что-то «NaN».

В то время как ответ @chiborg правильный, есть еще что-то, что следует отметить:

Точка, если вы используете этот метод для проверки ввода, результат будет довольно либеральным.

Итак, да, вы можете использовать parseFloat(string) (или в случае полных чисел parseInt(string, radix) ‘, а затем обернуть это с помощью isNaN() , но помните о полученной информации с номерами, переплетенными с дополнительными нечисловыми символами.

5 zangw [2015-12-28 06:26:00]

Как и в ES6, Object.is(..) — это новая утилита, которая может использоваться для проверки двух значений для абсолютного равенства:

5 SpYk3HH [2015-01-21 15:53:00]

Простое решение!

ДЕЙСТВИТЕЛЬНО супер просто! Вот! Имейте этот метод!

Использовать так же просто, как:

Также: см. ниже 1-й пример для нескольких альтернативных реализаций.

Пример:

Есть несколько альтернативных путей, которые вы используете для реализации, если вы не хотите использовать альтернативно названный метод и хотели бы обеспечить его доступность более глобально. Предупреждение. Эти решения включают изменение собственных объектов и, возможно, не лучшее решение. Всегда будьте осторожны и помните, что другие библиотеки, которые вы можете использовать, могут зависеть от собственного кода или подобных изменений.

Альтернативная реализация 1: Заменить собственный метод isNaN .

Альтернативная реализация 2: добавление к объекту с номером
* Предлагается, поскольку это также поли-заполнение для ECMA 5-6

Альтернативное решение test, если пусто

Простой метод окна Я написал этот тест, если объект Пусто. Это немного отличается тем, что он не дает, если элемент «точно» NaN, но я решил, что я выброшу его, так как это может быть полезно при поиске пустых элементов.

Пример:

Исключительно глубокая проверка, если она пуста

Этот последний идет немного глубоко, даже проверяя, заполнен ли объект пустыми объектами. Я уверен, что у него есть место для улучшения и возможных ям, но до сих пор он, похоже, захватывает все.

Если ваша среда поддерживает ECMAScript 2015, вы можете использовать Number.isNaN , чтобы убедиться, что значение действительно NaN .

Итак, в средах с поддержкой ECMA Script 2015 вы можете использовать

2 d2vid [2012-10-18 22:38:00]

Я использую функцию underscore isNaN , потому что в JavaScript:

По крайней мере, помните о том, что было получено.

2 Tiborg [2014-03-20 17:13:00]

Я просто хочу поделиться другой альтернативой, это не обязательно лучше, чем другие, но я думаю, стоит посмотреть:

Логика заключается в том, что каждое число, кроме 0 и NaN , добавляется к true .

Я сделал быстрый тест, и он работает так же хорошо, как Number.isNaN и как проверка на себя для false. Все три выполняют лучше, чем isNan

Может стать полезным, если вы хотите избежать сломанной функции isNan .

Кажется, что isNaN() не поддерживается в Node.js из коробки.
Я работал с

Точный способ проверки:

1 Yuci [2017-09-09 11:40:00]

NaN в JavaScript означает «Not A Number», хотя его тип фактически является номером.

Чтобы проверить, имеет ли переменная значение NaN, мы не можем просто использовать функцию isNaN(), потому что isNaN() имеет следующую проблему, см. ниже:

Что действительно происходит, так это то, что myVar неявно принуждается к числу:

Это действительно имеет смысл, потому что «А» на самом деле не является числом. Но мы действительно хотим проверить, действительно ли myVar имеет значение NaN.

Так isNaN() не может помочь. Тогда что мы должны делать вместо этого?

В свете того, что NaN является единственным значением JavaScript, которое обрабатывается неравномерно, поэтому мы можем проверить его равенство для себя, используя! ==

Итак, чтобы заключить, если это правда, что сама переменная! ==, то эта переменная имеет точно значение NaN:

0 Zzy [2016-05-04 20:22:00]

Другое решение упоминается в странице MDN parseFloat

Он предоставляет функцию фильтра для строгой разборки

И затем вы можете использовать isNaN , чтобы проверить, есть ли это NaN

How do you check that a number is NaN in JavaScript?

I’ve only been trying it in Firefox’s JavaScript console, but neither of the following statements return true:

31 Answers 31

For checking whether any value is NaN, instead of just numbers, see here: How do you test for NaN in Javascript?

I just came across this technique in the book Effective JavaScript that is pretty simple:

Since NaN is the only JavaScript value that is treated as unequal to itself, you can always test if a value is NaN by checking it for equality to itself:

Didn’t realize this until @allsyed commented, but this is in the ECMA spec: https://tc39.github.io/ecma262/#sec-isnan-number

As far as a value of type Number is to be tested whether it is a NaN or not, the global function isNaN will do the work

For a generic approach which works for all the types in JS, we can use any of the following:

For ECMAScript-5 Users:

For people using ECMAScript-6:

And For consistency purpose across ECMAScript 5 & 6 both, we can also use this polyfill for Number.isNan

please check This Answer for more details.

NaN is a special value that can’t be tested like that. An interesting thing I just wanted to share is this

This returns true only for NaN values and Is a safe way of testing. Should definitely be wrapped in a function or atleast commented, because It doesnt make much sense obviously to test if the same variable is not equal to each other, hehe.

You should use the global isNaN(value) function call, because:

  • It is supported cross-browser
  • See isNaN for documentation

I hope this will help you.

As of ES6, Object.is(..) is a new utility that can be used to test two values for absolute equality:

To fix the issue where ‘1.2geoff’ becomes parsed, just use the Number() parser instead.

So rather than this:

EDIT: I just noticed another issue from this though. false values (and true as a real boolean) passed into Number() return as 0 ! In which case. parseFloat works every time instead. So fall back to that:

And that covers seemingly everything. I benchmarked it at 90% slower than lodash’s _.isNaN but then that one doesn’t cover all the NaN’s:

Just to be clear, mine takes care of the human literal interpretation of something that is «Not a Number» and lodash’s takes care of the computer literal interpretation of checking if something is «NaN».

While @chiborg ‘s answer IS correct, there is more to it that should be noted:

Point being, if you’re using this method for validation of input, the result will be rather liberal.

So, yes you can use parseFloat(string) (or in the case of full numbers parseInt(string, radix) ‘ and then subsequently wrap that with isNaN() , but be aware of the gotcha with numbers intertwined with additional non-numeric characters.

Simple Solution!

REALLY super simple! Here! Have this method!

Use as simple as:

Also: See below 1st example for a couple alternate implementations.

Example:

There are a couple alternate paths you take for implementaion, if you don’t want to use an alternately named method, and would like to ensure it’s more globally available. Warning These solutions involve altering native objects, and may not be your best solution. Always use caution and be aware that other Libraries you might use may depend on native code or similar alterations.

Alternate Implementation 1: Replace Native isNaN method.

Alternate Implementation 2: Append to Number Object
*Suggested as it is also a poly-fill for ECMA 5 to 6

Alternate solution test if empty

A simple window method I wrote that test if object is Empty. It’s a little different in that it doesn’t give if item is «exactly» NaN, but I figured I’d throw this up as it may also be useful when looking for empty items.

Example:

Extremely Deep Check If Is Empty

This last one goes a bit deep, even checking if an Object is full of blank Objects. I’m sure it has room for improvement and possible pits, but so far, it appears to catch most everything.

I just want to share another alternative, it’s not necessarily better than others here, but I think it’s worth looking at:

The logic behind this is that every number except 0 and NaN are cast to true .

I’ve done a quick test, and it performs as good as Number.isNaN and as checking against itself for false. All three perform better than isNan

May become useful if you want to avoid the broken isNaN function.

If your environment supports ECMAScript 2015, then you might want to use Number.isNaN to make sure that the value is really NaN .

So, in ECMA Script 2015 supported environments, you might want to use

NaN in JavaScript stands for «Not A Number», although its type is actually number.

To check if a variable is of value NaN, we cannot simply use function isNaN(), because isNaN() has the following issue, see below:

What really happens here is that myVar is implicitly coerced to a number:

It actually makes sense, because «A» is actually not a number. But what we really want to check is if myVar is exactly of value NaN.

So isNaN() cannot help. Then what should we do instead?

In the light that NaN is the only JavaScript value that is treated unequal to itself, so we can check for its equality to itself using !==

So to conclude, if it is true that a variable !== itself, then this variable is exactly of value NaN:

Читать еще:  New objava добавление объявления да
Ссылка на основную публикацию
Adblock
detector