Когда вы начинаете изучать JavaScript, первое, что вам нужно изучить, - это типы данных. Пока мы говорим о числах, строках и логических значениях, вещи довольно ясны, объекты тоже в порядке, но когда в игру приходят значения null и undefined, это может немного запутаться.

Если вы хотите следовать некоторым примерам, просто откройте консоль DevTools, нажав Ctrl+Shift+J (Windows / Linux) или Cmd+Opt+J (Mac).

нулевой

Значение null представляет собой ссылку, которая обычно преднамеренно указывает на несуществующий или недопустимый объект или адрес (источник: MDN). Несмотря на то, что он указывает на что-то несуществующее, ничто, это глобальный объект (и одно из примитивных значений JavaScript).

Отрицание значения null возвращает true, но сравнение его с ложью (или с истиной) дает ложь.

В основных математических операциях значение null преобразуется в 0.

неопределенный

Глобальное свойство undefined представляет примитивное значение undefined. Это один из примитивных типов JavaScript (источник: MDN). По сути, это говорит нам о том, что что-то не определено. Вы получите это, например, отображая значение переменной, которой не присвоено значение.

Если вы попробуете какие-либо арифметические операции с undefined, вы получите NaN (вы можете просто доверить мне это или проверить это самостоятельно 🙃).

Подобно null, отрицание undefined дает true, но сравнение его с true или false дает false.

Хорошо, а в чем разница? null vs undefined

Давайте сравним сходства и различия, которые мы получаем после прочтения содержания выше.

Сходства:

  • оба при отрицании дают истину (ложные значения), но ни одно из них не равно истинному или ложному
  • они представляют собой нечто несуществующее ...

Отличия:

  • … Null представляет «ничто», полностью не существующее. undefined то, что не определено
  • undefined имеет свой собственный тип данных (undefined), null - это только объект
  • null обрабатывается как 0 в основных арифметических операциях, undefined возвращает NaN

Круто, я думаю, это уже неплохо, но есть еще кое-что, на что мы должны указать.

Первый оператор: undefined == null, дает нам истину, поскольку JavaScript изо всех сил пытается преобразовать оба значения в один и тот же тип.

Второй: undefined === null, отличается, на этот раз мы говорим: «Пожалуйста, также сравните типы данных» (в основном проверьте, одинаковы ли обе эти вещи), и JavaScript оказывается достаточно умен, чтобы увидеть разница, поэтому он говорит «ложь».

Последний, третий:! Undefined ===! Null, ну ... это на самом деле очень просто. Поскольку оба значения инвертированы, возвращают true, у нас есть true с обеих сторон, так что это правда.

Это может показаться очень подозрительным, но на самом деле так и есть, как и весь этот прекрасный язык.

NaN (не число)

Поскольку мы знаем, что такое undefined и null, и их различия, позвольте сказать несколько слов о значении NaN.

Глобальное свойство NaN представляет собой значение, представляющее Not-A-Number (источник: MDN).

Думаю, определение достаточно ясное. JavaScript возвращает это значение, если число, которое мы должны получить, не является числом. Например, когда вы пытаетесь вычесть «огурец» из 10 или разделить 12 на «R2D2».

Есть несколько ситуаций, в которых вы могли бы ожидать получить это значение, но не получили:

  • когда вы что-то добавляете к строке. Если JavaScript видит знак + и строку, он также автоматически преобразует второй элемент добавления в строку.

  • когда вы работаете с числами и логическими значениями. Логические значения преобразуются в единицы и нули. Истина = 1. Ложь = 0.

А теперь самое сложное (или самое сложное?). На самом деле NaN - это число.

Хм… так что можно сказать, что он представляет собой отсутствие самого себя, не так ли? И, идя дальше, мы приходим к выводу, что это, по сути, противоположность самой себе.

Итак, если NaN по сравнению с самим собой возвращает false, то независимо от того, с чем мы собираемся его сравнивать, он всегда будет давать false. К счастью, у нас есть функция, которая может проверять, является ли аргумент NaN - isNaN ().

Краткое резюме

Значение null ничего не представляет, несуществующий или недопустимый объект или адрес. Он преобразуется в 0 с помощью простых арифметических операций и является глобальным объектом.
null == false дает нам ложь.

Глобальное свойство undefined представляет примитивное значение undefined. Он говорит нам, что чему-то не присвоена ценность; не определено. undefined не преобразуется в какое-либо число, поэтому при его использовании в математических вычислениях возвращается NaN.

NaN (Not-A-Number) представляет собой то, что не является числом, хотя на самом деле это число. Он не равен самому себе, и чтобы проверить, является ли что-то NaN, нам нужно использовать функцию isNaN ().

Все вышеперечисленное является ложными значениями, поэтому они преобразуются в ложные.

JavaScript любит преобразовывать значения, поэтому вам нужно использовать тройные знаки равенства (===), чтобы убедиться, что оба элемента не совпадают.

Надеюсь, эта статья была для вас полезной, и вы получили некоторое представление о том, что такое null, undefined и NaN. Если что-то неясно или вы хотите указать на что-то (может быть, на ошибку?), Я буду более чем рад ответить.

Пусть код будет с вами!

✉️ Подпишитесь на рассылку еженедельно Email Blast 🐦 Подпишитесь на CodeBurst на Twitter , просмотрите 🗺️ Дорожная карта веб-разработчиков на 2018 год и 🕸️ Изучите веб-разработку с полным стеком .