← Все вопросы

Почему получается NaN в JavaScript и как от него избавиться?

Задан 31 месяц назад718 просмотров2 ответа
10

Считаю что-то простое, а в результате NaN. Что вообще такое этот NaN, откуда он берётся при вычислениях и как проверить/исправить, чтобы получалось нормальное число?

2 ответа

15
✓ Принятый ответ — помог автору

NaN = «Not a Number», особое значение-результат, когда математика не имеет смысла. Появляется, когда ты пытаешься считать с тем, что в число не превращается.

Главные источники:

1. Арифметика со строкой, которая не число:

Number('abc');      // NaN
'привет' * 2;       // NaN
parseInt('px');     // NaN

2. Значение из input не преобразовано:

const x = document.querySelector('#a').value; // строка, например '' (пусто)
console.log(x * 2); // NaN, если поле пустое или с буквами

3. Обращение к несуществующему полю в расчёте:

const obj = {};
console.log(obj.price * 2); // undefined * 2 = NaN

4. Деление/операции, типа 0/0 → NaN.

Как проверить: ВАЖНО — NaN === NaN это false (NaN не равен сам себе!). Поэтому обычное сравнение не работает. Используй Number.isNaN:

const n = Number('abc');
Number.isNaN(n); // true
n === NaN;       // false — НЕ так!

Как избавиться: подстрахуй преобразование дефолтом:

const x = Number(input.value) || 0;   // NaN → 0
const price = Number(obj.price) || 0;

|| 0 срабатывает, потому что NaN — ложное значение. Так расчёт не сломается, даже если данные пустые.

5

Коварная черта NaN — он заразный: одно NaN в цепочке делает NaN весь результат.

const total = 10 + 20 + Number('x') + 5;
console.log(total); // NaN — всё испорчено одним слагаемым

Поэтому при отладке ищи первое место, где появилось NaN, логируя промежуточные значения. Обычно виновата необработанная строка из формы или поле объекта, которого нет.

Ваш ответ

Войдите, чтобы ответить на вопрос.