- isNaN
- Отправить комментарий
- Учебник javascript
- Основные элементы языка
- Сундучок с инструментами
- Интерфейсы
- Все об AJAX
- Оптимизация
- Разное
- isNaN
- Синтаксис
- Параметры
- Описание
- Для чего нужна функция isNaN ?
- Примечание
- Генерация значения NaN
- Особенности поведения
- Пример
- Спецификация
- Поддержка браузерами
- Number . isNa N ( )
- Как пишется
- Как понять
- Сравнение is Na N ( ) и Number . isNa N ( )
- На практике
- Николай Лопин советует
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 :