catchステートメントでは適用されますが、throwステートメントでは適用されません。
これは、IE で throw "hogehoge" と記述した場合に発生する「構文エラー」のメッセージです。
正しく例外を発生させるには、 throw new Error("あっぷるあっぷる") のように記述してください。
window.onerror = function(errorMsg, url, lineNumber) { alert(errorMsg); alert(url); alert(lineNumber); return false; // true なら例外はユーザに表示されません(ログに残ります) } window.onload = function() { if (1) { throw new Error("たぶれっとたぶれっと"); } }
IE では動かないよ
throw "Error" といったコードは、IE 以外のブラウザでは動きますが、IEでは動きません。
IE は、 SyntaxError なども定義ES3の仕様通りに実装されていないため
throw new SyntaxError("SyntaxError");
としても、catchで捕捉しないと「catchステートメントでは適用されますが、throwステートメントでは適用されません。」と画面に出てしまいます。
一見すると「指定したメッセージが出てこないけど、とりあえず例外は出てるから、まぁいっか〜」になりがちですが、このメッセージは、コードの記述ミス書き方に問題があることを知らせるメッセージなんですよ。
ついでに、
一ヶ所に集める目的で、例外をハンドリングする関数を用意して、そこで例外を出すようにすると、コードを熟知していないユーザがデバッグで苦労するハメになります(コードが追えなくなる)。
function throwError(msg) { throw new Error(msg); } : : : [9,1,1,1].forEach(function(v, i) { var calc = function(a) { if (a === 3) { throwError("invalid param"); } } calc(i * v); });
このようなコードにしてしまうと、例外の発生源の特定が困難になるか、非常に手間が掛かりますよ。
今のところ Firebug などは、 throwError < (?)() < (?)() < (?)() のように例外が発生した階層を表示せず、
throwErrorで例外が発生した といった、(つれない)情報しか表示してくれませんから。