From 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:43:23 -0500 Subject: initial commit --- .../global_objects/error/stack/index.html | 125 +++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 files/uk/web/javascript/reference/global_objects/error/stack/index.html (limited to 'files/uk/web/javascript/reference/global_objects/error/stack') diff --git a/files/uk/web/javascript/reference/global_objects/error/stack/index.html b/files/uk/web/javascript/reference/global_objects/error/stack/index.html new file mode 100644 index 0000000000..04bb1ff642 --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/error/stack/index.html @@ -0,0 +1,125 @@ +--- +title: Error.prototype.stack +slug: Web/JavaScript/Reference/Global_Objects/Error/Stack +tags: + - Error + - JavaScript + - Prototype + - Властивість + - нестандартна +translation_of: Web/JavaScript/Reference/Global_Objects/Error/Stack +--- +
{{JSRef}} {{non-standard_header}}
+ +

Нестандартна властивість stack об'єктів {{jsxref("Error")}} надає звіт про те, які функції були викликані, в якому порядку, з якого рядка файлу та з якими аргументами. Текстовий рядок стеку ведеться з останніх викликів до більш ранніх, і аж до початкового виклику у глобальній області видимості.

+ +

Опис

+ +

Кожний крок буде відокремлений новим рядком, де перша частина є іменем функції (якщо це не виклик з глобальної області видимості), далі через символ (@) розташування файлу (окрім випадку, коли функція є конструктором помилки під час викидання помилки), двокрапка та, якщо доступне розташування файлу, номер рядка. (Зауважте, що об'єкт {{jsxref("Error")}} також має властивості fileName, lineNumber та columnNumber для отримання цієї інформації про помилку, що викидається (але тільки про помилку, а не стек її викликів).)

+ +

Зауважте, що це формат, який використовується у Firefox. Не існує стандартного формату. Однак, Safari 6+ та Opera 12- використовують дуже схожий формат. Переглядачі на рушії JavaScript V8 (такі, як Chrome, Opera 15+, Android Browser) та IE10+, з іншого боку, використовують інший формат (дивіться архів документів MSDN щодо error.stack).

+ +

Значення аргументів у стеку: До версії Firefox 14 після імені функції були б записані значення аргументів, перетворені у рядок, у круглих дужках, одразу перед знаком (@). І якщо об'єкти (або масиви) були б виведені у вигляді "[object Object]", і, таким чином, не могли бути перетворені назад у справжні об'єкти, то скалярні величини можна відновити (хоча, можливо — це досі доступно у Firefox 14 — легше використовувати arguments.callee.caller.arguments, а ім'я функції можна отримати через arguments.callee.caller.name). "undefined" записується як "(void 0)". Зауважте, що, якщо рядкові аргументи були передані з такими символами як "@", "(", ")" (або вони присутні в іменах файлів), на них не можна покладатись для розбиття рядка на окремі частини. Таким чином, у Firefox 14 та пізніших версіях це вже не є такою проблемою.

+ +

Різні веб-переглядачі встановлюють це значення в різні моменти. Наприклад, Firefox встановлює його при створенні об'єкта {{jsxref("Error")}}, в той час як PhantomJS встановлює його лише при викиданні об'єкта {{jsxref("Error")}}, а реалізація у архівних документах MSDN, схоже, співпадає з PhantomJS.

+ +

Приклад

+ +

Наступна HTML-розмітка демонструє використання властивості stack .

+ +
<!DOCTYPE HTML>
+<meta charset="UTF-8">
+<title>Приклад трасування стеку</title>
+<body>
+<script>
+function trace() {
+  try {
+    throw new Error('myError');
+  }
+  catch(e) {
+    alert(e.stack);
+  }
+}
+function b() {
+  trace();
+}
+function a() {
+  b(3, 4, '\n\n', undefined, {});
+}
+a('перший виклик, першийАргумент');
+</script>
+
+ +

За умови, що наведена розмітка збережена як C:\example.html у файловій системі Windows, вона створить діалогове вікно оповіщення з наступним текстом:

+ +

Firefox 30 та новіші містять номер стовпця:

+ +
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:21
+ +

Firefox 13 та старші натомість виведуть наступний текст:

+ +
Error("myError")@: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
+ +

Стек коду у eval() та Function()

+ +

Починаючи з Firefox 30, стек помилки коду у викликах Function() та eval() тепер створює звіти з більш детальною інформацією щодо номеру рядків та стовпчиків у цих викликах. Виклики Function позначаються записом "> Function", а виклики eval записом "> eval".

+ +
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:6
+
+
+try {
+  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
+
+ +

Ви також можете скористатися директивою //# sourceURL, щоб присвоїти ім'я коду, що передається. Дивіться також Відладка коду у eval() та Function() у статтях на сторінці Debugger, а також цей пост.

+ +

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

+ +

Не є частиною жодних специфікацій. Нестандартна властивість.

+ +

Сумісність з веб-переглядачами

+ +
+
+ + +

{{Compat("javascript.builtins.Error.stack")}}

+
+
+ +

Див. також

+ + -- cgit v1.2.3-54-g00ecf