Elementor Header #8

12. NaN

NaN (Not-a-Number) — это специальное значение в JavaScript, которое обозначает «не число». Оно используется для обозначения результатов операций, которые не имеют числового значения. Понимание NaN и его поведение важно для обработки ошибок и корректной работы с числовыми данными.

Основные принципы

Определение NaN:

  • NaN представляет результат операций, которые не могут быть представлены как числа.
  • Например, результат деления нуля на ноль или преобразование строки, которая не может быть интерпретирована как число.
				
					let result = 0 / 0;
console.log(result); // NaN

let invalidNumber = Number("abc");
console.log(invalidNumber); // NaN

				
			

Свойства NaN:

  • NaN не равен ни одному числу, включая самого себя.
  • Это означает, что выражение NaN === NaN вернёт false.
				
					console.log(NaN === NaN); // false

				
			

Проверка на NaN:

  • Для проверки значения на NaN следует использовать функцию isNaN().
  • Однако, начиная с ECMAScript 6, более предпочтительно использовать Number.isNaN(), который проверяет только числовые значения.
				
					console.log(isNaN("string")); // true (потому что "string" не является числом)
console.log(Number.isNaN("string")); // false (потому что "string" не является числом)

let result = 0 / 0;
console.log(Number.isNaN(result)); // true

				
			
				
					let num = Number("abc"); // Неудачное преобразование строки в число
console.log(num); // NaN

				
			
  • Операции с нечисловыми значениями:
				
					let x = "hello" * 2; // Умножение строки на число
console.log(x); // NaN

				
			

Примеры использования NaN

Пример 1: Обработка данных из ввода пользователя
				
					let userInput = prompt("Введите число:");
let number = Number(userInput);

if (Number.isNaN(number)) {
    console.log("Введено не число");
} else {
    console.log("Введенное число:", number);
}

				
			
Пример 2: Проверка результата вычислений
				
					function divide(a, b) {
    if (b === 0) {
        return NaN; // Деление на ноль
    }
    return a / b;
}

let result = divide(10, 0);
if (Number.isNaN(result)) {
    console.log("Результат деления не является числом");
} else {
    console.log("Результат деления:", result);
}

				
			

Распространённые ошибки

Проверка NaN с помощью оператора сравнения:

Оператор === не работает для проверки NaN, так как NaN не равен самому себе.

				
					let result = 0 / 0;
console.log(result === NaN); // false

				
			

Решение: Используйте Number.isNaN() для проверки.

				
					console.log(Number.isNaN(result)); // true

				
			

Неявное преобразование типов:

Неявное преобразование типов может привести к неожиданным результатам и появлению NaN.

				
					let result = "abc" / 2;
console.log(result); // NaN

				
			

Решение: Проверяйте данные перед выполнением арифметических операций.

				
					let input = "10";
let number = Number(input);
if (!Number.isNaN(number)) {
    console.log(number * 2); // 20
} else {
    console.log("Некорректный ввод");
}

				
			

Заключение

Знание особенностей NaN и правильное его использование поможет вам эффективно обрабатывать ошибки и данные в ваших программах. Понимание того, как NaN возникает и как с ним работать, позволяет создавать более надёжные и устойчивые к ошибкам приложения.

Тестовое задание

Напишите код, который выполняет следующие действия:

  • Запрашивает у пользователя ввод числа.
  • Преобразует ввод в число.
  • Проверяет, является ли введённое значение числом с использованием Number.isNaN().
  • Выводит сообщение об ошибке, если введённое значение не является числом.
				
					let userInput = prompt("Введите число:");
let number = Number(userInput);

if (Number.isNaN(number)) {
    console.log("Ошибка: введено не число.");
} else {
    console.log("Введённое число:", number);
}

				
			

Напишите функцию safeDivide, которая выполняет деление двух чисел и возвращает NaN, если делитель равен нулю. Проверьте её работу с разными значениями.

				
					function safeDivide(a, b) {
    if (b === 0) {
        return NaN;
    }
    return a / b;
}

console.log(safeDivide(10, 2)); // 5
console.log(safeDivide(10, 0)); // NaN

let result = safeDivide(10, 0);
if (Number.isNaN(result)) {
    console.log("Результат деления не является числом");
} else {
    console.log("Результат деления:", result);
}

				
			
Этот урок поможет вам лучше понять, как работать с NaN в JavaScript и избегать распространённых ошибок, связанных с некорректными числовыми значениями.
logo