В чем отличие null от undefined и когда их использовать в JavaScript
Что проверяют
Понимаете ли вы, что undefined появляется сам, а null ставится намеренно, и знаете ли поведение при сравнении.
Как отвечать
undefined означает «значение не задано» и возникает само: необъявленное свойство объекта, аргумент, который не передали, функция без return, переменная после объявления без присваивания.
null означает «намеренно пусто». Его всегда ставит программист или API: пользователь не выбрал город, у записи нет родителя, запрос ничего не нашёл.
Технические отличия:
typeof undefinedэто"undefined", аtypeof nullэто"object", историческая ошибка языка, которую не чинят ради совместимости;null == undefinedистинно,null === undefinedложно. Отсюда идиомаvalue == null: она проверяет оба сразу и это единственный случай, где нестрогое сравнение оправдано;- значения по умолчанию в параметрах подставляются только для
undefined. Передалиnull, значитnullи будет; ??и?.работают с обоими, а||подменяет ещё и0, пустую строку иfalse, поэтому для значений по умолчанию берут??;- JSON:
nullсериализуется, а свойство со значениемundefinedиз объекта просто исчезает.
Практика: в своём коде используйте undefined как естественное отсутствие и не присваивайте его вручную, а null как явное «пусто», особенно на границе с базой, где null есть по-настоящему.
Где спотыкаются
Проверяют только undefined и пропускают null, пришедший с сервера.
Используют || для значения по умолчанию и теряют ноль или пустую строку.
Ожидают, что параметр по умолчанию сработает для null.
Считают typeof null === "object" признаком того, что это объект.