Перейти к содержимому

Как проверить значение на nan js

  • автор:

Как проверить значение на 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)// 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 :

JS проверка на NaN: как проверить, является ли число NaN в JavaScript

Lorem ipsum dolor

В 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) < // Какой то ваш код >

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *