Как проверить значение на nan js
Свойство NaN представляет значение “Not-a-Number”. Это свойство указывает, что значение не является числом.
Свойство NaN аналогично свойству Number.Nan.
Совет. Используйте глобальную функцию isNaN(), чтобы проверить, является ли значение значением NaN.
Поддержка браузеров

Синтаксис
Технические подробности
| Возвращаемое значение: | NaN |
| Версия JavaScript: | ECMAScript 1 |
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)// falseNumber.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)// falseisNaN(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')// falseNumber(undefined) // NaN isNaN(undefined) // true Number('0') // 0 isNaN('0') // false
Однако, если неявная передача undefined (вызов функции без параметров) в Number возвращает число 0 , то is Na N ( ) вернёт true , приняв пустое значение за NaN .
Number()// 0 isNaN()// trueNumber() // 0 isNaN() // true
Number . isNa N ( ) же никаких приведений не производит. Она вернёт true только если переданное в неё значение является NaN .
На практике
Скопировать ссылку «На практике» Скопировано
Николай Лопин советует
Скопировать ссылку «Николай Лопин советует» Скопировано
При анализе ввода пользователя всегда нужно проверять результаты вычислений, иначе пользователь вместо расчёта — например «Итого» в корзине увидит непонятные для себя символы. Вот, к примеру, очень приятная цена ✈️

Попробуйте имитировать ошибку и ввести в поле что-то помимо числа скидки, без проверки тоже получится NaN :
JS проверка на NaN: как проверить, является ли число NaN в JavaScript
![]()
В JS проверка на NaN затруднена там, что это тип данных, который равняется «ничем». NaN — это «Not a Number» и переводится как «не число». Обычно такое значение возвращается, когда невозможно завершить работу математической функции или когда в значении математической функции расположено «не число». На практике, NaN появляется тогда, когда в JS-скрипте появляется ошибка.
Может возникнуть простой вопрос: для чего в JavaScript NaN, если это не число, не строка и даже не «пустота»? NaN редко когда применяется специально. А его история возникновения тянется еще с первых лет создания JavaScript. Те, кто работает с JavaScript, знают, что это не строгий и многое прощающий язык программирования. NaN в него был введен для того, чтобы в случае возникающих ошибок в скрипте, программа не оканчивала собственное выполнение, а продолжала работать вернув в качестве значения ошибки NaN.
Проверка на NaN в JS
- функция «isNaN()» при проверке вернет «true» в двух случаях: если при проверк е значение уже NaN и если оно станет NaN после попытки преобразования его в число;
- метод «Number.isNaN()» вернет «true» только если значение при проверк е уже является NaN.
Проверка на NaN в JavaScript: безотказный метод
Проверка на NaN в JS возможна, но для этого нужно выстраивать специфичные конструкции из кода. Например, можно попробовать такую конструкцию:
function sanitise(a)
if (isNaN(a))
return NaN;
>
return a;
>
console.log(sanitise(‘тут введите какое-то значение’));
Вы можете попробовать этот скрипт в действии и в функции «console.log()» ввести разные значения: строки, числа, NaN, underfilled и др. Таким образом вы сможете убедиться, что такая проверка на NaN в JS работает безотказно.
Заключение
Сегодня мы познакомились с таким типом данных в JavaScript, как NaN. Самое важное, что теперь вы знаете как проводится проверка на NaN в JS. Она нужна не часто, так как NaN — это специфическое значение, которое получается самостоятельно, но может быть полезной.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Проверка значений переменных на null или NaN и их замена на 0
Если несколько или одна переменная равна null или NaN, как сделать так, что ее значение перезаписалось на 0?
if (type_work_amount || type_work_amount2 || type_work_amount3 == null || NaN) < // код >
Отслеживать
9,255 7 7 золотых знаков 15 15 серебряных знаков 30 30 бронзовых знаков
задан 28 окт 2022 в 10:04
53 9 9 бронзовых знаков
Лучше сохраните данные в массив, вместо создания множества переменных 🙂
28 окт 2022 в 10:22
@ΝNL993 покажите пример как сделать массивом?
28 окт 2022 в 10:27
Я из вашего кода вообще не понимаю что происходит
28 окт 2022 в 11:19
$type_work_amount = 22; $type_work_amount2 = null; $type_work_amount3 = 99; if ($type_work_amount === null) < $type_work_amount = 0; >else if ($type_work_amount2 === null) < $type_work_amount2 = 0; >else if ($type_work_amount3 === null) < $type_work_amount3 = 0; >let sum = $type_work_amount + $type_work_amount2 + $type_work_amount3; console.log(sum);
28 окт 2022 в 12:13
[123, null, NaN].map(. ) — а внутри функция которая берёт первый аргумент — элемент массива, а в функции уже делаете проверку, если текущее значение невалидное (null или NaN), тогда возвращаете 0, в противоположном случае, возвращаете то же значение.
28 окт 2022 в 13:16
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Для проверки значений на null, undefined, NaN в большенстве случаев достаточно преобразовать значение к типу boolean, как это делается в операторе if . Для явного преобразования можно воспользоваться функцией Boolean(value) или воспользоваться оператором !!(Двойное НЕ) !!value
Стоит заметить, что 0 и пустая строка вернут false.
Если необходимо, что бы 0 и пустая строка были не false, необходимо дополнительно реализовывать проверки.
Числа
Для чисел (typeof value === ‘number’) можно явно сравнить value === 0 , однако стоит помнить, что typeof NaN === ‘number’.
Проверить число, что оно является NaN можно при помощи встроенного метода чисел Number.isNaN(value) (Сокращенно isNaN(value) ) — вернет true, если value это NaN Для проверки числа на Infinity (бесконечность — возникает при делении на 0) есть встроенный метод Number.isFinite(value) (Сокращенно isFinite(value) ) — вернет true если число конечно.
Строки
Для строки выполнить проверку value === » или просто проверить на тип typeof value === ‘string’
Так же стоит помнить, что массив и объект всегда будут возвращать true, даже если они пустые.
Массивы
Для проверки массива достаточно проверить его длину. Если 0, то массив пустой
value.length === 0 или if (!value.length) < массив заполнен >else < массив пуст >
Для проверки, что переменная является массивом, можно обратиться к встроенному методу массивов Array.isArray(value) — вернет true, если это массив.
Объекты
Для выполнения проверки, что объект пустой, можно воспользоваться встроенным методом объектов Object.keys(values) , который возвращает массив ключей. Если длина полученного массива 0, значит объект пуст.
Так как тип данных у массивов и объектов одинаковый и typeof вернет ‘object’, то для того что бы отличить массив от объекта, необходимо проверить, является ли он массивом через встроенный метод массива Array.isArray(value)
Относительно вашего примера, я бы пошел простым путем и создал бы функцию, которая будет возвращать 0 если значение null или NaN или само значение переменной, если это не так:
let type_work_amount = 123; let type_work_amount2 = null; let type_work_amount3 = 3 / 'a'; console.log(type_work_amount, type_work_amount2, type_work_amount3); function checkVariable(val) < if (!val) return 0 return val; >console.log(checkVariable(type_work_amount)); console.log(checkVariable(type_work_amount2)); console.log(checkVariable(type_work_amount3)); //Если надо переопределить значение в переменной по условию, то можно присваивать переменной значение, которое возвращается из функции type_work_amount = checkVariable(type_work_amount); type_work_amount2 = checkVariable(type_work_amount2); type_work_amount3 = checkVariable(type_work_amount3); // Если надо что бы сработало одно из условий, то надо записать ваш IF вот так if (!type_work_amount || !type_work_amount2 || !type_work_amount) < // Какой то ваш код >