← Все вопросы

Что значит Uncaught TypeError: Cannot read properties of undefined в JavaScript?

Задан 24 месяца назад947 просмотров2 ответа
12

Постоянно ловлю Uncaught TypeError: Cannot read properties of undefined (reading 'name'). Код вроде нормальный. Что значит эта ошибка про чтение свойства undefined и как её ловить и чинить?

2 ответа

15
✓ Принятый ответ — помог автору

Это ошибка №1 у новичков. Она значит: ты пытаешься взять поле (.name) у того, что на самом деле undefined (или null), а не объект. В тексте (reading 'name') подсказано, какое именно свойство.

Типичные причины:

1. Объекта/элемента нет:

const user = users.find(u => u.id === 99); // не нашёл → undefined
console.log(user.name); // TypeError: Cannot read properties of undefined

2. DOM-элемент не найден (опечатка в id или скрипт раньше HTML):

const btn = document.querySelector('.btnn'); // null
btn.addEventListener(...); // упадёт

3. Поле вложенное, а промежуточного нет:

const data = {};
console.log(data.user.name); // data.user это undefined → ошибка

Как чинить:

Проверяй перед обращением или используй опциональную цепочку ?.:

console.log(user?.name); // если user undefined → вернёт undefined, без падения
console.log(data.user?.name);

Значение по умолчанию через ??:

const name = user?.name ?? 'Гость';

И главное — читай конец сообщения: (reading 'name') говорит, что упало именно на .name. Значит то, что слева от .name, оказалось undefined. Дальше иди по коду и пойми, почему оно не получило объект (не нашёлся элемент? пустой ответ сервера? опечатка?).

6

Быстрый способ локализовать: добавь лог прямо перед падающей строкой и посмотри, что там реально лежит.

console.log('user =', user); // увидишь undefined вместо объекта
console.log(user.name);      // вот тут падает

Девять из десяти раз окажется, что переменная пустая, потому что find/querySelector ничего не вернул, либо данные ещё не загрузились. Лечится проверкой if (user) или ?..

Ваш ответ

Войдите, чтобы ответить на вопрос.