HTML: Markup language
CSS: Styling language
JavaScript: Scripting language
Web APIs: Programming interfaces
All web technology
Learn web development
Discover our tools
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
View in English Always switch to English
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: Die stack-Eigenschaft wird de facto von allen großen JavaScript-Engines implementiert, und das 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.
stack
Die nicht standardisierte stack-Eigenschaft einer Error-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.
Error
Ein String.
Da die stack-Eigenschaft nicht standardisiert ist, unterscheiden sich die Implementierungen darin, wo sie installiert ist.
Error.prototype
Error.prototype.stack
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:
function foo() { bar(); } function bar() { baz(); } function baz() { console.log(new Error().stack); } foo();
#### JavaScriptCore baz@filename.js:10:24 bar@filename.js:6:6 foo@filename.js:2:6 global code@filename.js:13:4 #### SpiderMonkey baz@filename.js:10:15 bar@filename.js:6:3 foo@filename.js:2:3 @filename.js:13:1 #### V8 Error 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 standardisierte stack trace API zur Anpassung der Stack-Trace, einschließlich Error.captureStackTrace(), Error.stackTraceLimit, und Error.prepareStackTrace(). Andere Engines unterstützen diese API in unterschiedlichem Ausmaß.
Error.captureStackTrace()
Error.stackTraceLimit
Error.prepareStackTrace()
Verschiedene Engines setzen diesen Wert zu unterschiedlichen Zeiten. Die meisten modernen Engines setzen ihn, wenn das Error-Objekt erstellt wird. Dies bedeutet, dass Sie die vollständige Aufrufstack-Information innerhalb einer Funktion erhalten können, indem Sie Folgendes verwenden:
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 von eval() und Function-Konstruktoraufrufen erscheint ebenfalls im Stack:
eval()
Function
console.log(new Function("return new Error('Function failed')")().stack); console.log("===="); console.log(eval("new Error('eval failed')").stack);
#### JavaScriptCore anonymous@ global code@filename.js:1:65 ==== eval code@ eval@[native code] global code@filename.js:3:17 #### SpiderMonkey anonymous@filename.js line 1 > Function:1:8 @filename.js:1:65 ==== @filename.js line 3 > eval:1:1 @filename.js:3:13 #### V8 Error: 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 Firefox Debug eval sources Dokumentation.
//# sourceURL
Das folgende Skript zeigt, wie Sie die stack-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 id="output"></div>
#output { white-space: pre; font-family: monospace; }
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; }
Nicht Teil eines Standards.
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.