Get to know MDN better
This page was translated from English by the community. Learn more and join the MDN Web Docs community.
Не стандартно: Эта функция не стандартизирована. Мы не рекомендуем использовать нестандартные функции в действующих проектах, так как их поддержка браузерами ограничена, а поведение может измениться или быть удалено. Тем не менее, в некоторых случаях, когда нет стандартного решения, они могут быть подходящей альтернативой.
Нестандартное свойство 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.
Предполагается, что разметка выше сохранена как C:\example.html в файловой системе Windows. Она выводит следующий текст в диалоговом окне:
Начиная с Firefox 30 и более поздних версий, вывод содержит номер колонки (Firefox bug 762556):
trace@file:///C:/example.html:9:17 b@file:///C:/example.html:16:13 a@file:///C:/example.html:19:13 @file:///C:/example.html:21:9с Firefox 14 по Firefox 29:
trace@file:///C:/example.html:9 b@file:///C:/example.html:16 a@file:///C:/example.html:19 @file:///C:/example.html:21Firefox 13 и более ранние версии выводят следующий текст:
Error("Моя ошибка")@:0 trace()@file:///C:/example.html:9 b(3,4,"\n\n",(void 0),[object Object])@file:///C:/example.html:16 a("первый вызов, первый аргумент")@file:///C:/example.html:19 @file:///C:/example.html:21Начиная с Firefox 30, стек вызовов кода в вызовах Function() и eval() даёт более подробную информацию о номере строки и колонки внутри этих вызовов. Вызовы Function обозначаются "> Function", а вызовы eval() обозначаются "> eval". Смотрите Firefox bug 332176.
Также для именования исходного кода в функции eval() вы можете использовать директиву //# sourceURL. Смотрите раздел Отладка исходных кодов в функции eval() в документации по отладчику, а также эту запись в блоге (на английском).
Не является частью какой-либо спецификации. Не стандартно.
Enable JavaScript to view this browser compatibility table.
This page was last modified on 17 дек. 2024 г. by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.