Прежде чем мы перейдем к null и undefined, мы должны изучить две концепции: примитивные значения javascript и ложные значения. Они помогут нам понять значение null и undefined, поскольку null и undefined являются примитивными значениями JavaScript и обрабатываются как ложные (не ложные) для логических операций («И», «ИЛИ» и «НЕ»).

примитивные значения

JavaScript устанавливает значение для одного из шести примитивных типов данных:

  • Undefined (переменная без определенного значения)
  • Null (одно нулевое значение)
  • Логическое значение (истина или ложь)
  • Число (включая Infinity и NaN — не число!)
  • Строка (текстовые данные)
  • Символ (уникальный и неизменяемый примитив, новый для ES6/2015)

Ложные значения

  • false
  • 0 (ноль)
  • '' или "" (пустая строка)
  • null
  • undefined
  • NaN

нулевой

null означает «нет значения».

«Нулевое значение означает преднамеренное отсутствие какого-либо значения объекта.»

let a = null
console.log(a)//null
null == false //false
console.log(!null) // true

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

Переменная, которая была объявлена, но ей не присвоено значение или свойство объекта не существует, вернет значение undefined.

let b
console.log(b) //undefined
let Amy = {gender: "female"}
console.log(Amy.age) // undefined

Функция возвращает неопределенное значение, если значение не было возвращено.

function test1(){
  let a = 1
  console.log(a) //1
}
console.log(test1())//undefined

function test2(){
  let a = 1
  console.log(a) //1
  return a 
}
console.log(test2())//1

Наконец, null и undefined оба ложны, они свободно равны друг другу:

null == undefined //true
null !== undefined  //true

ресурсы: