[Edge]非標準。→
非標準: この機能は標準ではなく、標準化の予定もありません。公開されているウェブサイトには使用しないでください。ユーザーによっては使用できないことがあります。実装ごとに大きな差があることもあり、将来は振る舞いが変わるかもしれません。
Error | Error。 |
---|
¶String。呼び出された関数のトレース、つまり、その呼び出し順、呼び出したファイルの行番号、呼び出した関数の引数を提供します。スタック文字列は、最後の呼び出しから最初の呼び出しへ進み、元のグローバル スコープの呼び出しまで遡ります。
各ステップは改行で区切られ、行の先頭は関数名(グローバル スコープからの呼び出しでない場合)、次に @ 記号、ファイルの場所(エラーが投げられている時に関数がエラー コンストラクターである場合を除く)、コロン記号、ファイルの場所がある場合は行番号の順に続きます。(ただし、Error オブジェクトも、投げられたエラーから取り戻すため fileName および lineNumber、columnNumber プロパティを所有することに注意してください。これはエラーのみであり、そのトレースではありません。)
これは Firefox だけで使用される書式であることに注意してください。スタック トレースに標準の書式はありません。しかし、Safari 6 以降と Opera 12 以前ではとてもよく似た書式を使用します。一方で、V8 JavaScript エンジンを搭載したブラウザー(Chrome、Opera 15 以降、Android Browser など)や IE 10 以降のブラウザーは異なる書式を使用します(アーカイブされたMSDN の error.stack ドキュメントを参照)。
スタック上の引数の値: Firefox 14 以前(バグ 744842)で、関数名は、文字列に変換され括弧で囲まれた引数の値に続き、@ 記号の直前に置かれます。オブジェクト(または配列等)は変換された形式 "[object Object]" で現れるため、これが実際のオブジェクトに戻され評価されることはありません。スカラー値を受け取ります(それにも関わらず、少なくとも Firefox 14 では可能です。arguments.callee.caller.arguments を使用し、arguments.callee.caller.name により、簡単に関数名を取り戻すことが可能です)。"undefined" は、"(void 0)" として記録されます。ただし、"@"、"(", ")"(または、これらがファイル名に含まれる場合)を伴う文字列引数が渡された場合、行がそのコンポーネント部分で分かれてしまうため、これらに安易に頼ることができません。従って、Firefox 14 以降では、これが少なからず問題になります。
ブラウザによって値を設定するタイミングが異なります。例えば Firefox は、これを Error オブジェクトが作成された時に設定し、PhantomJS は、Error が投げられた時にのみ設定します。アーカイブされた MSDN のドキュメント によれば、PhantomJS の実装とも一致するようです。
<!DOCTYPE HTML> <meta charset="UTF-8"> <title>Stack Trace Example</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('first call, firstarg'); </script>
上記のマークアップは、Windows ファイルシステム上の C:\example.html に保存されているものと仮定します。これは、次のテキストを含む警告メッセージを生成します:
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("first call, firstarg")@file:///C:/example.html:19 @file:///C:/example.html:21
¶省く