Что означает ошибка типа non_object_property_load?

#javascript #google-chrome

#javascript #google-chrome

Вопрос:

Я часто вижу эту ошибку в javascript, который я отлаживаю. В консоли JS Chrome говорит что-то очень похожее на

 TypeError
    arguments: Array[2]
    message: "-"
    stack: "-"
    type: "non_object_property_load"
    __proto__: Error
  

Обычно я могу разобраться с основной проблемой, но в целом, что представляет собой ошибка?

Есть ли какой-либо способ получить трассировку стека до строки, которая вызвала проблему?

Ответ №1:

Вы пытаетесь получить доступ к чему-либо из null или undefined .

Например, этот код выдаст такую ошибку:

 null.foo;
  

Вы должны проверить, к каким свойствам вы обращаетесь из каких объектов, и использовать что-то вроде obj amp;amp; obj.prop вместо просто obj.prop .


Вы можете получить трассировку стека с помощью:

 console.log(new Error().stack);
  

- означает, что свойство является средством получения и не отображается автоматически, поскольку средство получения может иметь побочные эффекты. Хотя стек доступен ( - это не означает «недоступен»), вам просто нужно получить к нему явный доступ.

Комментарии:

1. Почему в этих случаях Chrome не отображает трассировку стека, как для других исключений?

2. @Leopd: Вы выполняете оценку через консоль? У меня все работает нормально, если я выполняю его нормально, например jsfiddle.net/XNLJ4 .

3. Да, простые случаи, такие как ваша скрипка, всегда показывают номер строки. В нем также говорится «Неперехваченная ошибка типа: не удается прочитать свойство ‘foo’, равное нулю» вместо неясного сообщения. Я вижу «non_object_property_load» только тогда, когда я глубоко погружен в сложный код. Хотел бы я знать, почему исключение иногда не перехватывается должным образом и не отображается.

4. Что ж, спасибо за объяснение этой части. Загадка того, почему он иногда не выдает ошибку должным образом, заслуживает отдельного вопроса.