Movatterモバイル変換


[0]ホーム

URL:


  1. Веб-технологии для разработчиков
  2. JavaScript
  3. Справочник по JavaScript
  4. Стандартные встроенные объекты
  5. Error
  6. Error.prototype.stack

This page was translated from English by the community.Learn more and join the MDN Web Docs community.

View in EnglishAlways switch to English

Error.prototype.stack

Не стандартно: Эта функция не стандартизирована. Мы не рекомендуем использовать нестандартные функции в действующих проектах, так как их поддержка браузерами ограничена, а поведение может измениться или быть удалено. Тем не менее, в некоторых случаях, когда нет стандартного решения, они могут быть подходящей альтернативой.

Сводка

Нестандартное свойствоstack объектаError возвращает трассировку стека вызываемых функций в порядке их выполнения, вместе с номерами строк, именами файлов и аргументами. Строка со стеком заполняется от самых недавних вызовов до вызова из глобальной области видимости.

Описание

Каждый шаг находится на отдельной строке; первая часть строки содержит имя функции (если это не вызов из глобальной области видимости), затем знак собаки (@), местоположение файла (кроме случая, когда функция является конструктором ошибки, которую она выбрасывает), двоеточие и, если есть местоположение файла, номер строки. Обратите внимание, что объектError также обладает свойствамиfileName,lineNumber иcolumnNumber, позволяющими извлечь имя файла, номер строки и столбца из выброшенной ошибки (но только самой ошибки, а не всего стека вызовов).

Обратите внимание, что такой формат используется в Firefox. Нет никакого «стандартного формата». Однако, Safari 6+ и Opera 12- используют очень похожий формат. С другой стороны, браузеры, использующие движок JavaScript V8 (например, Chrome, Opera 15+, Браузер Android) и IE10+, используют другой формат (смотрите эту статью поerror.stack в MSDN).

Значения аргументов в стеке: до Firefox 14 (Firefox bug 744842) за именем функции и прямо перед знаком собаки (@) в круглых скобках следовали значения аргументов, преобразованные в строки. Хотя объекты (или массивы и прочее) преобразовывались в форму"[object Object]", и, таким образом, невозможно было узнать их содержимое, скалярные значения могли быть извлечены (это всё ещё можно использовать в Firefox 14 — однако проще для получения аргументов использоватьarguments.callee.caller.arguments, а для получения имени функции —arguments.callee.caller.name). Значение"undefined" показывалось как"(void 0)". Обратите внимание, что если строковые аргументы содержали значения, включающие символы"@","(",")" (или если они включали имена файлов), вам не так то просто было разбить строку на составные части. Таким образом, в Firefox 14 и более поздних версиях это перестало быть проблемой.

Примеры

Следующая разметка HTML демонстрирует использование свойстваstack.

html
<!doctype html><meta charset="UTF-8" /><title>Пример трассировки стека</title><body>  <script>    function trace() {      try {        throw new Error("Моя ошибка");      } catch (e) {        alert(e.stack);      }    }    function b() {      trace();    }    function a() {      b(3, 4, "\n\n", undefined, {});    }    a("первый вызов, первый аргумент");  </script></body>

Предполагается, что разметка выше сохранена какC:\example.html в файловой системе Windows. Она выводит следующий текст в диалоговом окне:

Начиная с Firefox 30 и более поздних версий, вывод содержит номер колонки (Firefox bug 762556):

trace@file:///C:/example.html:9:17b@file:///C:/example.html:16:13a@file:///C:/example.html:19:13@file:///C:/example.html:21:9

с Firefox 14 по Firefox 29:

trace@file:///C:/example.html:9b@file:///C:/example.html:16a@file:///C:/example.html:19@file:///C:/example.html:21

Firefox 13 и более ранние версии выводят следующий текст:

Error("Моя ошибка")@:0trace()@file:///C:/example.html:9b(3,4,"\n\n",(void 0),[object Object])@file:///C:/example.html:16a("первый вызов, первый аргумент")@file:///C:/example.html:19@file:///C:/example.html:21

Стек кода в функцииeval()

Начиная с Firefox 30, стек вызовов кода в вызовахFunction() иeval() даёт более подробную информацию о номере строки и колонки внутри этих вызовов. ВызовыFunction обозначаются"> Function", а вызовыeval() обозначаются"> eval". СмотритеFirefox bug 332176.

js
try {  new Function("throw new Error()")();} catch (e) {  console.log(e.stack);}// anonymous@file:///C:/example.html line 7 > Function:1:1// @file:///C:/example.html:7:6try {  eval("eval('FAIL')");} catch (x) {  console.log(x.stack);}// @file:///C:/example.html line 7 > eval line 1 > eval:1:1// @file:///C:/example.html line 7 > eval:1:1// @file:///C:/example.html:7:6

Также для именования исходного кода в функцииeval() вы можете использовать директиву//# sourceURL. Смотрите разделОтладка исходных кодов в функцииeval() в документации поотладчику, а также этузапись в блоге (на английском).

Спецификации

Не является частью какой-либо спецификации. Не стандартно.

Совместимость с браузерами

Смотрите также

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2026 Movatter.jp