Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Eingebaute Standardobjekte
  5. Fehler
  6. stack

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.

View in EnglishAlways switch to English

Error.prototype.stack

Nicht standardisiert: Diese Funktion ist nicht standardisiert. Wir raten davon ab, nicht-standardisierte Funktionen auf produktiven Webseiten zu verwenden, da sie nur von bestimmten Browsern unterstützt werden und sich in Zukunft ändern oder entfernt werden können. Unter Umständen kann sie jedoch eine geeignete Option sein, wenn es keine standardisierte Alternative gibt.

Hinweis:Diestack-Eigenschaft wird de facto von allen großen JavaScript-Engines implementiert, unddas JavaScript-Standardkomitee erwägt, sie zu standardisieren. Aufgrund von Implementierungsinkonsistenzen können Sie sich nicht auf den genauen Inhalt des Stack-Strings verlassen, aber Sie können im Allgemeinen davon ausgehen, dass er existiert und zu Debugging-Zwecken verwendet werden kann.

Die nicht standardisiertestack-Eigenschaft einerError-Instanz bietet eine Rückverfolgung, welche Funktionen aufgerufen wurden, in welcher Reihenfolge, von welcher Zeile und Datei und mit welchen Argumenten. Der Stack-String geht von den neuesten Aufrufen zu den früheren zurück und führt zurück zum ursprünglichen Aufruf im globalen Bereich.

Wert

Ein String.

Da diestack-Eigenschaft nicht standardisiert ist, unterscheiden sich die Implementierungen darin, wo sie installiert ist.

  • In Firefox ist sie eine Accessor-Eigenschaft aufError.prototype.
  • In Chrome und Safari ist sie eine Dateneigenschaft auf jederError-Instanz mit dem Deskriptor:
Eigenschaften vonError.prototype.stack
Schreibbarja
Aufzählbarnein
Konfigurierbarja

Beschreibung

Jede JavaScript-Engine verwendet ihr eigenes Format für Stack-Traces, aber sie sind in ihrer Gesamtstruktur ziemlich konsistent. Jede Implementierung verwendet eine separate Zeile im Stack, um jeden Funktionsaufruf darzustellen. Der Aufruf, der direkt den Fehler verursacht hat, steht ganz oben, und der Aufruf, der die gesamte Aufrufkette gestartet hat, steht ganz unten. Nachfolgend einige Beispiele für Stack-Traces:

js
function foo() {  bar();}function bar() {  baz();}function baz() {  console.log(new Error().stack);}foo();
#### JavaScriptCorebaz@filename.js:10:24bar@filename.js:6:6foo@filename.js:2:6global code@filename.js:13:4#### SpiderMonkeybaz@filename.js:10:15bar@filename.js:6:3foo@filename.js:2:3@filename.js:13:1#### V8Error    at baz (filename.js:10:15)    at bar (filename.js:6:3)    at foo (filename.js:2:3)    at filename.js:13:1

V8 bietet die nicht standardisiertestack trace API zur Anpassung der Stack-Trace, einschließlichError.captureStackTrace(),Error.stackTraceLimit, undError.prepareStackTrace(). Andere Engines unterstützen diese API in unterschiedlichem Ausmaß.

Verschiedene Engines setzen diesen Wert zu unterschiedlichen Zeiten. Die meisten modernen Engines setzen ihn, wenn dasError-Objekt erstellt wird. Dies bedeutet, dass Sie die vollständige Aufrufstack-Information innerhalb einer Funktion erhalten können, indem Sie Folgendes verwenden:

js
function foo() {  console.log(new Error().stack);}

Ohne einen Fehler werfen und dann abfangen zu müssen.

Stack-Frames können auch andere Dinge außer expliziten Funktionsaufrufen sein. Beispielsweise beginnen Event-Listener, Timeout-Jobs und Promise-Handler alle ihre eigene Aufrufkette. Quellcode innerhalb voneval() undFunction-Konstruktoraufrufen erscheint ebenfalls im Stack:

js
console.log(new Function("return new Error('Function failed')")().stack);console.log("====");console.log(eval("new Error('eval failed')").stack);
#### JavaScriptCoreanonymous@global code@filename.js:1:65====eval code@eval@[native code]global code@filename.js:3:17#### SpiderMonkeyanonymous@filename.js line 1 > Function:1:8@filename.js:1:65====@filename.js line 3 > eval:1:1@filename.js:3:13#### V8Error: Function failed    at eval (eval at <anonymous> (filename.js:1:13), <anonymous>:1:8)    at filename.js:1:65====Error: eval failed    at eval (eval at <anonymous> (filename.js:3:13), <anonymous>:1:1)    at filename.js:3:13

In Firefox können Sie die//# sourceURL-Direktive verwenden, um eine eval-Quelle zu benennen. Siehe die FirefoxDebug eval sources Dokumentation.

Beispiele

Verwendung der stack-Eigenschaft

Das folgende Skript zeigt, wie Sie diestack-Eigenschaft verwenden können, um einen Stack-Trace in Ihrem Browserfenster auszugeben. Sie können dies verwenden, um die Struktur des Stacks Ihres Browsers zu überprüfen.

<div></div>
#output {  white-space: pre;  font-family: monospace;}
js
function trace() {  throw new Error("trace() failed");}function b() {  trace();}function a() {  b(3, 4, "\n\n", undefined, {});}try {  a("first call, first arg");} catch (e) {  document.getElementById("output").textContent = e.stack;}

Spezifikationen

Nicht Teil eines Standards.

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2026 Movatter.jp