Javascript проверить число на nan

isNaN

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

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

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

1 == NaN // false NaN == NaN // false isNaN(NaN) // true isNaN("12") // false

а 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 — число (number) — читай доку.
typeof NaN -> «number»

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

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

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

Проверить переменную 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’ (см. выше) отработало корректно.

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

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

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

Отправить комментарий

  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

  • Асинхронное программирование
  • Google Gears в деталях
  • Javascript Flash мост
  • Букмарклеты и правила их написания
  • О подборке книг на сайте
  • Почему — плохо
  • Способы идентификации в интернете
  • Уровни DOM
  • Что почитать?
  • Шаблонизация с javascript
  • Юнит-тесты уровня браузера на связке Selenium + PHP.
  • Справочники: Javascript/HTML/CSS
  • Система сборки и зависимостей Google Closure Library
  • Хранение данных на клиенте. DOM Storage и его аналоги.
  • 10 лучших функций на JavaScript
  • First, you have a great blog. I will be.
    9 минут 25 секунд назад
  • Software companies and developers also.
    20 минут 59 секунд назад
  • Move Better is a unique and dynamic.
    48 минут 13 секунд назад
  • Move Better is a unique physiotherapy.
    52 минуты 40 секунд назад
  • The wave of undead legions is around.
    6 часов 19 минут назад
  • Super Mario has been released for every.
    6 часов 22 минуты назад
  • Регулярные выражения pizza tower.
    8 часов 24 минуты назад
  • jokergame pg-slot.
    17 часов 18 минут назад
  • jokergame pg-slot.
    17 часов 18 минут назад
  • Xanax Kopen (Alprazolam) 2 mg online
    22 часа 52 минуты назад

Источник

isNaN

Функция isNaN() определяет является ли литерал или переменная нечисловым значением ( NaN ) или нет. При работе с функцией необходимо проявлять осторожность так как она имеет свои особенности. В качестве альтернативы можно использовать метод Number.isNaN() из ECMAScript 6, или дополнительно проверять литерал или переменную на нечисловое значение при помощи typeof .

Синтаксис

Параметры

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

Описание

Для чего нужна функция isNaN ?

В отличие от других возможных значениях в JavaScript, при работе с значением данного типа невозможно полагаться на == и === для определения, является ли переменная или литерал нечисловым значением ( NaN ) или нет, так как проверки NaN == NaN и NaN === NaN в качестве значения вернут false . Следовательно, для проверки нужна функция isNaN .

Примечание

Для альтернативной проверки переменной на NaN без использования функции isNaN() можно воспользоваться конструкцией x !== x

var x = NaN x != x // true x !== x // true

Генерация значения NaN

Значение NaN генерируются арифметическими операциями, результатом которых является undefined или unrepresentable. Такие условия не обязательно обозначают переполнение стека. NaN также может являться результатом попытки преобразования числа в строку, или значения, не имеющего эквивалента в простых числовых примитивах.

Например, деление нуля на нуль возвращает NaN — но деление других чисел на 0 не возвращает NaN.

var x = NaN x != x // true x !== x // true

Особенности поведения

С самых ранних версий функции isNaN её поведение для не числовых переменных или литералов было довольно-таки запутанным. Когда аргументом функции isNaN является переменная, тип которой не Number, она преобразуется к типу Number . Полученное значение затем проверяется, является ли оно NaN . Таким образом для не числовых значений, которые можно преобразовать в числовой тип без не-NaN значения (в частности, пустая строка или логические примитивы, которые преобразуются в 0 или 1), возвращаемое значение «false» может быть полной неожиданностью; пустая строка преобразуется в «not a number.» Путаница связана с тем, что «not a number» имеет определённое значение, описанное в стандарте IEEE-794 чисел с плавающей точкой. Функцию стоит воспринимать в качестве ответа на вопрос, «Является ли это значение корректным числом по стандарту IEEE-794?»

В следующей версии ECMAScript (ES6) функция Number.isNaN() также присутствует. Number.isNaN(x) будет надёжным методом для проверки, содержит ли x значение NaN или нет. Даже с Number.isNaN , однако, результатом NaN остаётся точное числовое значение, а не просто «not a number».

Пример

isNaN(NaN); // true isNaN(undefined); // true isNaN(>); // true isNaN(true); // false isNaN(null); // false isNaN(37); // false // strings isNaN("37"); // false: "37" преобразуется в число 37 которое не NaN isNaN("37.37"); // false: "37.37" преобразуется в число 37.37 которое не NaN isNaN(""); // false: пустая строка преобразуется в 0 которое не NaN isNaN(" "); // false: строка с пробелом преобразуется в 0 которое не NaN isNaN("37,5"); // true // Даты isNaN(new Date()); // false isNaN(new Date().toString()); // true // Пример почему использование isNaN не всегда уместно isNaN("blabla") // true: "blabla" преобразовано в число. // При парсинге преобразуется в число при неудаче возвращает NaN 

Спецификация

Поддержка браузерами

BCD tables only load in the browser

Источник

Number . isNa N ( )

Статический метод Number . isNa N ( ) проверяет переданное аргументом значение и возвращает true , если это значение NaN .

Как пишется

Скопировать ссылку «Как пишется» Скопировано

 Number.isNaN(NaN)// true Number.isNaN()Number.isNaN(42)Number.isNaN('42')Number.isNaN(null)Number.isNaN(undefined)Number.isNaN(false)// false Number.isNaN(NaN) // true Number.isNaN() Number.isNaN(42) Number.isNaN('42') Number.isNaN(null) Number.isNaN(undefined) Number.isNaN(false) // false      

Как понять

Скопировать ссылку «Как понять» Скопировано

Существуют ситуации, когда результат математической обработки не может быть получен. Например, Math . sqrt ( — 9 ) или parse Int ( ‘text’ ) . Результатом выполнения в таком случае будет NaN . NaN расшифровывается как Not a Number, то есть «не число». Однако, он относится к числовому типу данных.

 typeof NaN// 'number' typeof NaN // 'number'      

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

 function getUserAge()  while (true)  const value = prompt('Пожалуйста, укажите ваш возраст') if (!value)  alert('Вы ничего не ввели!') continue > return Number(value) >> const age = getUserAge() if (age === NaN)  alert('Вы ввели неверные данные') // Не сработает> function getUserAge()  while (true)  const value = prompt('Пожалуйста, укажите ваш возраст') if (!value)  alert('Вы ничего не ввели!') continue > return Number(value) > > const age = getUserAge() if (age === NaN)  alert('Вы ввели неверные данные') // Не сработает >      

Мы бы могли использовать уникальные свойства NaN и написать собственную утилиту для проверки результата, сравнивая его с самим собой.

 function isNaN(number)  return number !== number> const age = getUserAge() if (isNaN(age))  alert('Вы ввели неверные данные') // Теперь будет работать> function isNaN(number)  return number !== number > const age = getUserAge() if (isNaN(age))  alert('Вы ввели неверные данные') // Теперь будет работать >      

Однако, мы не рекомендуем использовать такой подход в разработке. Для проверки лучше применять статический метод Number . isNa N ( ) у обёртки Number .

Есть так же глобальная функция is Na N ( ) , но она работает не всегда так, как ожидается и возвращает true и при значениях, отличных от NaN . Например:

 isNaN(undefined)// true Number.isNaN(undefined)// false isNaN(undefined) // true Number.isNaN(undefined) // false      

Сравнение is Na N ( ) и Number . isNa N ( )

Скопировать ссылку «Сравнение isNaN() и Number.isNaN()» Скопировано

Отличие заключается в том, что глобальная функция is Na N ( ) приводит к числовому типу всё, что было в неё передано, если оно не является числом. Если в результате приведения был получен NaN , она возвращает true :

 Number(undefined)// NaNisNaN(undefined)// true Number('0')// 0isNaN('0')// false Number(undefined) // NaN isNaN(undefined) // true Number('0') // 0 isNaN('0') // false      

Однако, если неявная передача undefined (вызов функции без параметров) в Number возвращает число 0 , то is Na N ( ) вернёт true , приняв пустое значение за NaN .

 Number()// 0 isNaN()// true Number() // 0 isNaN() // true      

Number . isNa N ( ) же никаких приведений не производит. Она вернёт true только если переданное в неё значение является NaN .

На практике

Скопировать ссылку «На практике» Скопировано

Николай Лопин советует

Скопировать ссылку «Николай Лопин советует» Скопировано

🛠 При анализе ввода пользователя всегда нужно проверять результаты вычислений, иначе пользователь вместо расчёта — например «Итого» в корзине увидит непонятные для себя символы. Вот, к примеру, очень приятная цена ✈️

NaN цена за билет

Попробуйте имитировать ошибку и ввести в поле что-то помимо числа скидки, без проверки тоже получится NaN :

Источник

Читайте также:  Updating java for ubuntu
Оцените статью