2011-06-30 6 views
1

「Uncaught SyntaxError」がtry/catchによって処理されない理由を説明できますか? JSの残りが実行されるように、このタイプのエラーを正常に処理することは可能ですか?例えばJavaScript: "Uncaught SyntaxError"でヒットしない[Chrome]

try { response.write(;); } 
catch(e) { console.log(e); } 

このコードはスロー "捕捉されなかっにSyntaxError:予期しないトークンと、"キャッチにジャンプしてエラーオブジェクトを記録する代わりに、[Chrome]ブラウザエラー。 Firefoxでも同様の結果が得られます。キャッチで処理するのではなく、スローされたエラーです。

答えて

2

これは構文の例外なので、javascriptパーサーがコードを解析できなかったことを意味します。ブラウザはあなたのコードを解析できなかったので、それを実行することはできません。あなたのtry/catchブロックについては知らない。 try/catchブロックは、ブロックのコンテキストで実行されるコードの結果としてスローされた例外を捕捉することができます。

5

構文エラーは実行時例外ではありません。プログラムで例外をスローして捕捉できるようにするには、実行できる必要があります。実行するには、javascriptである必要があります。上の例は有効なjavascriptではありません。インタープリタは、最初の無効な行が見えても "catch"行に到達しない場合には、エラーを放棄して出力します。

2

これには回避策を使用できます。

try { 
    Function('response.write(;);') 
} catch(e) { 
    console.log(e); 
} 

は、このようes6 template string supportを決定するために使用することでした:

var isEs6Template; 
try { 
    Function('``'); 
    isEs6Template = true; 
} catch(e) { 
    isEs6Template = false; 
} 

console.log('es6 template is', isEs6Template ? 'supported' : 'unsupported'); 
関連する問題