Этот вопрос проверяет понимание поведения JavaScript при обращении к свойствам неопределённых значений и помогает избежать ошибок времени выполнения.
В JavaScript undefined — это примитивное значение, которое обозначает отсутствие определения переменной или свойства. Поскольку это примитив, у него нет внутренней структуры объекта, и попытка получить доступ к его свойству (например, undefined.someProperty) или вызвать метод приводит к немедленной ошибке.
Движок JavaScript, встречая выражение undefined.property, пытается преобразовать undefined в объект, чтобы получить доступ к свойству. Это преобразование невозможно для примитива undefined, поэтому генерируется TypeError. Это защитный механизм языка, предотвращающий дальнейшую работу с несуществующими данными.
Рассмотрим типичный сценарий, где переменная может быть undefined:
let user;
// user = undefined по умолчанию
// Это вызовет ошибку:
// console.log(user.name); // TypeError!
// Решение 1: Проверка через if
if (user !== undefined) {
console.log(user.name);
}
// Решение 2: Опциональная цепочка (ES2020)
console.log(user?.name); // Выведет undefined, но ошибки не будет
// Решение 3: Использование значения по умолчанию
let safeName = (user || {}).name; // undefined
let safeName2 = user?.name ?? 'Гость'; // 'Гость'obj.level1.level2.property).Вывод: Всегда проверяйте или защищайте код при доступе к свойствам переменных, которые могут быть undefined. Используйте опциональную цепочку ?. для безопасного доступа и оператор нулевого слияния ?? для задания значений по умолчанию. Это ключевая практика для написания устойчивого JavaScript-кода.