Следующий код не работает:
let obj1,obj2;
obj2 = {
atributo: 'texto'
};
console.log(obj1.atributo);
Показ в консоли сообщения:
Uncaught TypeError: невозможно прочитать свойства неопределенного (чтение «атрибута»)
В Firefox (v96) сообщение:
Uncaught TypeError: obj1 не определен
Что это значит и как я могу это исправить?
На основании ошибки
Эта ошибка очень распространена: вы пытаетесь получить доступ к несуществующему элементу или его значение не определено.
Ошибка означает, что вы не можете получить доступ к этому свойству , но почему?
В примере, который вы разместили
obj1
, он объявлен, но не используется, давайте посмотрим, какой тип данных выдает нам тест.Как это решить?
Для этой ошибки значение переменных должно быть нулевым или неопределенным . Вы можете сделать следующее:
После серии вопросов и ответов на ту же тему
Поясним его эквивалент в Javascript:
Что это значит?
Значение сообщения об ошибке «Uncaught TypeError: не удается прочитать свойство XXX неопределенного» :
А это значит, что мы пытаемся получить доступ к свойству (атрибуту или функции) идентификатора, который не определен.
В примере в вопросе ошибка возникает из-за того, что у нас есть две переменные, obj1 и obj2, где obj1 не присвоено значение, оно не определено . Если бы obj1 был равен
null
, ошибка была бы аналогичной.Как это решить?
Чтобы это исправить, нужно найти в нашем коде атрибут , к которому
XXX
мы пытаемся получить доступ (или установить), а затем понять, почему родительский объект имеет значениеnull
илиundefined
.Типичными причинами обычно являются:
Попытка доступа к переменной, измененной асинхронным кодом (ответом на вызов AJAX или событием, таким как щелчок мышью или нажатие клавиши), прежде чем он присвоил значение этой переменной.
Предполагая, что функция всегда возвращает значение, отличное от
null
илиundefined
: например, если этот запрос возвращает список с 2 элементами, но мы пытаемся получить доступ к несуществующему третьему элементу: