Ответ
NaN (Not a Number) — это специальное значение в JavaScript, которое представляет результат некорректной или неопределенной математической операции.
Ключевые особенности:
- Тип:
typeof NaNвозвращает"number". Это парадоксально, ноNaNявляется числовым типом. - Сравнение:
NaNне равно ничему, включая само себя.NaN === NaNвозвращаетfalse. - Распространение: Почти любая математическая операция с
NaNв качестве операнда вернетNaN.
Проверка на NaN:
Из-за особенности сравнения, для проверки нужно использовать специальные функции:
Number.isNaN(value)(рекомендуется) — возвращаетtrue, только если значение в точности равноNaN.- Глобальная
isNaN(value)— сначала пытается преобразовать значение в число, а затем проверяет. Это может давать неожиданные результаты (isNaN("строка")вернетtrue).
Примеры в контексте Node.js:
// Как возникает NaN
console.log(0 / 0); // NaN
console.log(Math.sqrt(-1)); // NaN
console.log(parseInt('не число')); // NaN
// Проверка
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN('текст')); // false (в отличие от isNaN)
console.log(isNaN('текст')); // true (потому что 'текст' -> NaN)
// Практический пример: валидация ввода
function parseNumber(input) {
const num = Number(input);
if (Number.isNaN(num)) {
throw new Error('Введено нечисловое значение');
}
return num;
}
В Node.js при работе с данными (например, из запросов или файлов) важно использовать Number.isNaN() для точной валидации числовых значений.
Ответ 18+ 🔞
А, ну это про NaN, ёпта! Слушай, сейчас объясню, что это за зверь такой, а то народ часто путается, как будто впервые слышит.
NaN — это, грубо говоря, пиздец в мире чисел. Представь, ты пытаешься поделить ноль на ноль или извлечь корень из минус единицы. Ну и что получится? Правильно, нихуя не получится, а получится вот эта самая хуйня — NaN. Это как бы число, но которое на самом деле не число. Запутал? Сейчас распутаем.
Самое важное, что надо запомнить:
-
Тип, блядь, парадоксальный. Спросишь у него
typeof NaN— он тебе гордо ответит"number". Да-да, ёперный театр, сам от себя охуеешь. Он числового типа, но при этом нихуя не число. Такая вот хитрая жопа. -
Он сам себе не ровня. Вот это вообще классика.
NaN === NaNвозвращаетfalse. Представь, ты приходишь к зеркалу, а отражение тебе говорит: «Пошёл на хуй, я тебя не знаю». Вот это и есть NaN. Он уникальный в своём роде уродец. -
Зараза ебаная. Как чума. Коснётся он любой твоей операции — и всё, пиши пропало, результат будет тоже
NaN. Заразил всё и вся.
Как проверить, что перед тобой именно этот пидарас шерстяной?
Из-за его поехавшей набекрень логики сравнения, if (x === NaN) — это путь в никуда. Надо использовать специальные инструменты:
Number.isNaN(value)— это твой бро, твой надёжный друг. Он смотрит на значение и говорит: «Да, это в точности тот самый уродец NaN» или «Нет, это что-то другое». Честный, прямолинейный. Его и используй всегда.- Глобальная
isNaN(value)— это уже мудя какая-то. Она сначала пытается впендюрить твоё значение в число, а потом уже судит. Скажешь ейisNaN("Привет")— она сначала «Привет» в число превратит (получит NaN), а потом скажет: «Ага, это NaN!». Доверия к ней — ноль ебать. Может наговорить лишнего.
Ну и примерчики, чтобы совсем всё стало ясно, как божий день:
// Откуда эта дрянь берётся
console.log(0 / 0); // NaN (деление на ноль, ёба)
console.log(Math.sqrt(-1)); // NaN (из воздуха корень, бля)
console.log(parseInt('абвгд')); // NaN (ну ты и текст подсунул)
// Проверяем как профи
console.log(Number.isNaN(NaN)); // true (да, это он, гадёныш)
console.log(Number.isNaN('я строка, сука')); // false (а вот это уже нет, isNaN бы соврала!)
console.log(isNaN('я строка, сука')); // true (вот видишь, брехунья!)
// Практика из жизни: допустим, с фронта пришла какая-то хуйня, а тебе число надо
function makeItNumber(input) {
const num = Number(input);
if (Number.isNaN(num)) {
throw new Error('Чувак, ты мне какую-то дичь прислал, это не число!');
}
return num;
}
В Node.js, когда данные из запросов ползут или из файлов читаешь, без Number.isNaN() — просто никуда. Иначе потом сиди и лови эти ебушки-воробушки, когда вся логика накроется медным тазом из-за одной вкраплённой заразы.