Чем отличается isNaN() от Number.isNaN()?
В JavaScript есть несколько способов проверки, является ли значение "Не числом" (NaN). Два из самых распространенных методов — это isNaN() и Number.isNaN(). Хотя оба метода выполняют схожую функцию, они имеют важные различия в своем поведении и области применения.
1. Определение и поведение
isNaN()
- Общая функция:
isNaN()— это глобальная функция, которая проверяет, является ли переданное значение «Не числом» (NaN). - Приведение типов: Важной особенностью этой функции является то, что она сначала приводит аргумент к числу. Это означает, что она может возвращать
trueдля значений, которые на самом деле не являются NaN, но при преобразовании в число становятся таковыми.
Пример использования:
console.log(isNaN(NaN)); // true
console.log(isNaN('hello')); // true, так как 'hello' превращается в NaN
console.log(isNaN(undefined)); // true, так как undefined превращается в NaN
console.log(isNaN(123)); // false, 123 — это число
Number.isNaN()
- Метод объекта Number:
Number.isNaN()— это метод, который принадлежит объекту Number. Он проверяет, является ли переданное значение NaN, но не выполняет приведение типов. - Строгая проверка: Этот метод возвращает
trueтолько в случае, если значение — это именно NaN и не приводит его к числу.
Пример использования:
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN('hello')); // false, так как не число
console.log(Number.isNaN(undefined)); // false
console.log(Number.isNaN(123)); // false
2. Ключевые различия
-
Приведение типов:
isNaN(): Выполняет неявное приведение типов, что может привести к путанице.Number.isNaN(): Не выполняет приведение типов, что делает его более предсказуемым.
-
Область применения:
isNaN(): Подходит для проверки нечисловых значений в общем.Number.isNaN(): Используется, когда нужно строго проверить, является ли значение именно NaN.
3. Практические советы
- Предпочитайте Number.isNaN(): В большинстве случаев лучше использовать
Number.isNaN()для проверки NaN, так как он более надежен и предсказуем. - Избегайте isNaN() для серьезных проверок: Если вы используете
isNaN(), будьте осторожны, так как он может дать неожиданные результаты из-за неявного приведения.
4. Распространенные ошибки
- Использование
isNaN()для проверки числовых значений, что может привести к ошибкам в логике программы. - Предположение, что
isNaN(null)вернетfalse, когда на самом деле он вернетfalse, так какnullприводит к 0, а 0 не является NaN.
В заключение, хотя оба метода могут использоваться для проверки значений на NaN, Number.isNaN() является более надежным и безопасным выбором для большинства случаев.