Что вернёт обращение к несуществующему свойству?

👨‍💻 Frontend Developer 🟠 Может встретиться 🎚️ Легкий
#JavaScript #Объекты #База JS

Краткий ответ

При обращении к несуществующему свойству объекта JavaScript возвращает undefined. Это происходит потому, что JavaScript сначала ищет свойство в объекте, и если не находит — возвращает undefined, а не выбрасывает ошибку.


Полный ответ

Когда вы пытаетесь получить значение свойства, которого нет в объекте, JavaScript ведёт себя особенным образом. Важно понимать это для правильной работы с объектами.

Что возвращает JavaScript

При обращении к несуществующему свойству всегда возвращается undefined:

const user = { name: 'Иван' };
console.log(user.age); // undefined

Почему именно undefined

JavaScript не выбрасывает ошибку, потому что:

  1. Объекты могут быть динамическими
  2. Свойства могут добавляться и удаляться
  3. Это делает работу с объектами гибче

Простые примеры

Обычный объект

const obj = { a: 1 };
console.log(obj.b); // undefined
console.log(obj.c); // undefined

Вложенные объекты

const user = { 
  name: 'Иван',
  address: { city: 'Москва' }
};
 
console.log(user.phone); // undefined
console.log(user.address.street); // undefined

Важные особенности

1. Отличие от ошибки

const obj = { a: 1 };
 
// Не вызывает ошибку
console.log(obj.nonExistent); // undefined
 
// Вызовет ошибку
console.log(obj.nonExistent.property); // TypeError!

2. undefined как значение

const obj = { 
  value: undefined,
  missing: undefined // На самом деле свойства нет
};
 
console.log(obj.value); // undefined
console.log(obj.missing); // undefined
// Но это разные ситуации!

Когда это полезно

Проверка существования

const user = { name: 'Иван' };
 
// Простая проверка
if (user.age === undefined) {
  console.log('Возраст не указан');
}

Работа с опциональными данными

const config = { theme: 'dark' };
// Нет необходимости проверять каждый параметр
const lang = config.language || 'ru'; // 'ru' по умолчанию

Частые ошибки

1. Ожидание ошибки

// ❌ Думаем, что будет ошибка
const obj = { a: 1 };
console.log(obj.b); // undefined, не ошибка!
 
// ✅ Правильное понимание
console.log(obj.b === undefined); // true

2. Цепочка несуществующих свойств

// ❌ Ошибка — нельзя читать свойства undefined
const obj = { a: 1 };
console.log(obj.b.c); // TypeError!
 
// ✅ Безопасный способ
console.log(obj.b && obj.b.c); // undefined

Простые правила

  1. undefined — всегда возвращается при обращении к несуществующему свойству
  2. Без ошибки — JavaScript не выбрасывает ошибку при таком обращении
  3. Осторожно с цепочками — obj.a.b вызовет ошибку, если obj.a не существует
  4. Проверка — можно использовать для проверки наличия свойств
  5. Гибкость — это делает работу с объектами гибче

Понимание этого поведения помогает писать более надёжный код и избегать неожиданных ошибок.


Хотите больше статей для подготовки к собеседованиям? Подписывайтесь на EasyAdvice, добавляйте сайт в закладки и совершенствуйтесь каждый день 💪