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で例外が発生した といった、(つれない)情報しか表示してくれませんから。