Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

Error.prototype.stack

Non-standard: This feature is not standardized. We do not recommend using non-standard features in production, as they have limited browser support, and may change or be removed. However, they can be a suitable alternative in specific cases where no standard option exists.

Note:Thestack property is de facto implemented by all major JavaScript engines, andthe JavaScript standards committee is looking to standardize it. You cannot rely on the precise content of the stack string due to implementation inconsistencies, but you can generally assume it exists and use it for debugging purposes.

The non-standardstack property of anError instance offers a trace of which functions were called, in what order, from which line and file, and with what arguments. The stack string proceeds from the most recent calls to earlier ones, leading back to the original global scope call.

Value

A string.

Because thestack property is non-standard, implementations differ about where it's installed.

  • In Firefox, it's an accessor property onError.prototype.
  • In Chrome and Safari, it's a data property on eachError instance, with the descriptor:
Property attributes ofError.prototype.stack
Writableyes
Enumerableno
Configurableyes

Description

Each JavaScript engine uses its own format for stack traces, but they are fairly consistent in their high-level structure. Every implementation uses a separate line in the stack to represent each function call. The call that directly caused the error is placed at the top, and the call that started the whole call chain is placed at the bottom. Below are some examples of 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 provides the non-standardstack trace API for customizing the stack trace, includingError.captureStackTrace(),Error.stackTraceLimit, andError.prepareStackTrace(). Other engines support this API to varying extents.

Different engines set this value at different times. Most modern engines set it when theError object is created. This means you can get the full call stack information within a function using the following:

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

Without having to throw an error and then catch it.

Stack frames can be things other than explicit function calls, too. For example, event listeners, timeout jobs, and promise handlers all begin their own call chain. Source code withineval() andFunction constructor calls also appear in the 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, you can use the//# sourceURL directive to name an eval source. See the FirefoxDebug eval sources docs and theNamingeval Scripts with the//# sourceURL Directive blog post for more details.

Examples

Using the stack property

The following script demonstrates how to use thestack property to output a stack trace into your browser window. You can use this to check what your browser's stack structure looks like.

<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;}

Specifications

Not part of any standard.

Browser compatibility

See also

Help improve MDN

Learn how to contribute.

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp