#javascript #google-chrome
#javascript #google-chrome
Вопрос:
Я пытаюсь получить полезную информацию из объекта исключения (переданного в «catch»), и он почти пуст в Chrome. Я использовал его раньше и, помимо прочего, смог получить разумную трассировку стека. Это изменение в Chrome, или я делаю что-то не так? Я делаю это:
function pr(s) {
document.body.innerHTML = s.toString() "<br>";
}
function test() {
try {
var a = b; // err: b not defined
} catch (ex) {
pr('==== print exception object =====');
pr(ex);
pr('======= typeof exception object =====');
pr(typeof ex);
pr('===== members ======');
for (var i in ex) {
pr('amp;nbsp;----- ' i " ------");
pr(ex[i]);
}
console.log(ex);
}
}
function first() {
second();
}
function second() {
test();
}
first();
В Chrome это не дает мне ничего, кроме строки «ReferenceError: b не определен», если я выполняю toString() для объекта исключения, но если я пытаюсь просмотреть отдельные элементы объекта, там ничего нет. Примечательно, что нет элемента «stack». Опять же, если посмотреть на консоль, там есть еще что-то (но стек просто «-«)
Ответ №1:
Этот дефис означает, что это средство получения и не выполняется автоматически, поскольку это может иметь побочные эффекты. Однако вы можете регистрировать их отдельно:http://jsfiddle.net/R9Wkg/1 /.
Тот факт, что ошибка не поддается перечислению, зарегистрирован как проблема на сайте проекта V8.
Ответ №2:
Вы можете получить элементы ошибки, используя Object.getOwnPropertyNames(ex)
для их перечисления.
pr('===== members ======');
Object.getOwnPropertyNames(ex).forEach(function(i) {
pr('amp;nbsp;----- ' i " ------");
pr(ex[i]);
});
Комментарии:
1. @rob — да, я также осознал свою ошибку в отношении стека и исправил ее. 🙂
2. спасибо, что полезно знать, хотя pimvdb решает мою текущую проблему