Ответ
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() для точной валидации числовых значений.