Ничего себе - я не вижу ни одного человека в течение 6 лет, который предложил бы сначала проверить, доступен ли stack
перед его использованием! Худшее, что вы можете сделать в обработчике ошибок, это вызвать ошибку из-за вызова чего-то, что не существует.
Как уже говорили другие, в то время как stack
в большинстве случаев безопасно использовать, он не поддерживается в IE9 или более ранних версиях.
Я регистрирую свои непредвиденные ошибки, и трассировка стека довольно важна. Для максимальной поддержки я сначала проверяю, существует ли Error.prototype.stack
и является ли он функцией. Если это так, то использовать error.stack
безопасно.
window.onerror = function (message: string, filename?: string, line?: number,
col?: number, error?: Error)
{
// always wrap error handling in a try catch
try
{
// get the stack trace, and if not supported make our own the best we can
var msg = (typeof Error.prototype.stack == 'function') ? error.stack :
"NO-STACK " + filename + ' ' + line + ':' + col + ' + message;
// log errors here or whatever you're planning on doing
alert(msg);
}
catch (err)
{
}
};
Редактировать: Похоже, что поскольку stack
является свойством, а не методом, его можно безопасно вызывать даже в старых браузерах. Я все еще в замешательстве, потому что я был уверен, что проверка Error.prototype
раньше работала для меня, а теперь - нет, поэтому я не уверен, что происходит.