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-Standardisierungskomitee plant, 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 für Debugging-Zwecke verwendet werden kann.
Die nicht standardisierte stack
-Eigenschaft einer Error
-Instanz bietet eine Rückverfolgung, welche Funktionen in welcher Reihenfolge aufgerufen wurden, von welcher Zeile und Datei, und mit welchen Argumenten. Der Stack-String verläuft von den neuesten Aufrufen zu den früheren zurück und führt zurück zum ursprünglichen Aufruf im globalen Kontext.
Ein String.
Da die stack
-Eigenschaft nicht standardisiert ist, unterscheiden sich die Implementierungen, wo sie installiert wird.
Error.prototype
.Error
-Instanz, mit der folgenden Descriptor:Jede JavaScript-Engine verwendet ihr eigenes Format für Stack-Traces, aber sie sind ziemlich konsistent in ihrer Struktur auf hoher Ebene. Jede Implementierung verwendet eine separate Zeile im Stack, um jeden Funktionsaufruf darzustellen. Der Aufruf, der den Fehler direkt verursacht hat, steht ganz oben, und der Aufruf, der die gesamte Aufrufkette gestartet hat, steht ganz unten. Unten sind einige Beispiele von 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 des Stack-Traces, einschlieÃlich Error.captureStackTrace()
, Error.stackTraceLimit
, und Error.prepareStackTrace()
. Andere Engines unterstützen diese API in unterschiedlichem MaÃe.
Verschiedene Engines setzen diesen Wert zu unterschiedlichen Zeiten. Die meisten modernen Engines setzen ihn, wenn das Error
-Objekt erstellt wird. Das bedeutet, dass Sie die vollständige Aufruf-Stack-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 als explizite Funktionsaufrufe sein. Zum Beispiel beginnen Event-Listener, Timeout-Jobs und Promise-Handler ihre eigene Aufrufkette. Quellcode innerhalb von eval()
und Function
-Konstruktoraufrufen erscheint ebenfalls im Stack:
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-Dokumentation Debug eval sources und den Blog-Eintrag Naming eval
Scripts with the //# sourceURL
Directive für mehr Details.
Das folgende Skript demonstriert, wie Sie die stack
-Eigenschaft verwenden können, um einen Stack-Trace in Ihrem Browserfenster auszugeben. Sie können dies verwenden, um zu überprüfen, wie die Stack-Struktur Ihres Browsers aussieht.
#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;
}
Spezifikationen
Nicht Teil eines Standards.
Browser-Kompatibilität Siehe auchRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4