2011-06-30 13 views
1

有人可以向我解釋爲什麼try/catch不處理「Uncaught SyntaxError」?是否有可能優雅地處理這種類型的錯誤,以便剩下的JS運行?JavaScript:Catch沒有命中「Uncaught SyntaxError」[Chrome]

例如:

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

此代碼拋出一個 「未捕獲的SyntaxError:意外令牌;」 [Chrome]瀏覽器錯誤,而不是跳到catch並記錄錯誤對象。你也可以在Firefox中獲得類似的結果;拋出的錯誤,而不是用catch處理它。

回答

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'); 
相關問題