undefined- «значення немає, бо його не задали»: неініціалізована змінна, відсутня властивість, параметр без аргументу, результат функції безreturn.null- «значення свідомо немає»: його присвоюють явно.
let a; // undefined
const user = {};
user.phone; // undefined
const selected = null; // свідомо «нічого не вибрано»
typeof undefined; // 'undefined'
typeof null; // 'object' - історична помилка мови
|| проти ??:
a || bповертаєb, якщоaбудь-яке хибне значення:0,'',false,NaN,null,undefined.a ?? bповертаєb, лише якщоa-nullабоundefined.
const page = 0;
page || 1; // 1 - помилка: нуль - валідне значення
page ?? 1; // 0
const title = '';
title || 'Без назви'; // 'Без назви'
title ?? 'Без назви'; // ''
Правило: для значень за замовчуванням - ??, якщо 0, '' чи false мають бути збережені.
Поруч живе ?. (optional chaining): user?.address?.city повертає undefined, якщо будь-яка ланка null чи undefined, замість TypeError. І присвоєння ??=: options.timeout ??= 5000.