#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. Что ж, спасибо за объяснение этой части. Загадка того, почему он иногда не выдает ошибку должным образом, заслуживает отдельного вопроса.