2

このコードは Chrome でおかしな動作をします (ここでフィドル):

try {
   open('6:-=');
} catch(e) {}

まず、コードが try-catch でラップされているにもかかわらず、エラーがスローされます。

無効な URL '%36:%04-=' でウィンドウを開くことができません。

次に、不要な文字が URL に挿入されます。つまり%3、 と%04です。

try-catch がエラーをインターセプトしないのはなぜですか? また、URL にこれらの余分な文字が含まれているのはなぜですか?

4

3 に答える 3

5

try/は例外ではないため、何のcatch効果もありません。これは、コンソールに表示される単なるエラー メッセージです。次のことを証明できます。

open('6:-=');
console.log(1);  // logged as usual

基本的にconsole.error()、例外もスローしないのと同じですが、コンソールに例外のようなメッセージを出力します。

于 2012-09-01T15:09:18.857 に答える
3

フィドルには、表示されたエラーのように6:-=URL エンコードされたコロンの後の文字列にASCII コード 4 の印刷できない文字が含まれ%04ています。さらに6:、提供された URL の一部は URL スキームとして解釈され、数字で始めることはできません。そのため%36、RFC ではそのような動作は規定されていませんが、Chrome は 6 も同様に URL 引用符で囲んでいるようです。

于 2012-09-01T15:10:42.557 に答える
2

最初:pimvdbが言ったように、それは実際には例外ではないからです.

2 番目: %04 は、JSFiddle によって挿入される非表示の文字です。%36 は、Chrome が URL スキーム用にエンコードするときに %36 に変換する数値 6 です。%04 なしで更新されたフィドル

于 2012-09-01T15:07:54.320 に答える