當我在javascript中嘗試此代碼時,爲什麼它沒有捕獲拼寫錯誤XMLHttpRequest
上的錯誤?嘗試在javascript中捕獲
try {
var x= new XMLHdfattpRequest();
} catch (e){
alert(e);
}
當我在javascript中嘗試此代碼時,爲什麼它沒有捕獲拼寫錯誤XMLHttpRequest
上的錯誤?嘗試在javascript中捕獲
try {
var x= new XMLHdfattpRequest();
} catch (e){
alert(e);
}
我已經在Firefox,IE,Chrome中運行了這段代碼,它們都發生了錯誤,所以我假設你的意思是抓錯了拼寫。它沒有被捕獲的原因是因爲標準JavaScript沒有像C#這樣的語言進行靜態驗證。執行代碼時,必須在周圍的詞彙範圍內檢查名稱XMLHdfattpRequest
。如果沒有找到,它會成爲一個無法解析的參考。當您嘗試新增一個參考錯誤發生時的無法解析的參考。
@Chaos我不認爲該規範提到「無法解析的參考」。如果在當前作用域鏈中未找到名稱「foo」,則返回「undefined」值。 'foo'是'undefined'並且調用'foo'(如'foo()')會引發錯誤。 – 2010-11-17 18:03:35
@ŠimeVidas - 你需要深入一點。閱讀:** 10.2.1.2 ** - > ** 11.2.2 ** - > ** 8.7.1 ** – ChaosPandion 2010-11-17 18:19:09
@Chaos +1您說得對。具體來說,這些步驟是:** 11.2.2 **(新操作符) - > ** 11.1.2 **(標識符引用) - > ** 10.3.1 **(標識符分辨率) - > ** 10.2.2.1 **(GetIdentifierReference)這將返回一個Reference類型的值,其基值爲undefined。現在,我們返回** 11.2.2 **(新操作員) - > ** 8.7中的第二步。1 **(GetValue)在這裏引發ReferenceError。 – 2010-11-17 18:41:22
可能你在這之前有一些javascript錯誤代碼?
它可以打破你的瀏覽器解釋器,永遠不會運行你嘗試/ catch代碼。
我已經在FF 3.5.9和IE 8中測試了上述內容,並且它們的行爲如同彈出警告一樣。打開Firebug插件的FF也顯示警報。
正如其他人所說,試圖創建一個新的XMLHdfattpRequest
會給你一個FF中的ReferenceError
或IE中的TypeError
,肯定會被catch塊捕獲。
看來問題在於你的瀏覽器或JavaScript解釋器。它可能是骨頭的(我對我的回答非常基本),但是你有沒有檢查過JavaScript是否被啓用?畢竟,when you have eliminated the impossible, whatever remains, however improbable, must be the truth。
在什麼瀏覽器? – 2010-11-17 17:38:02
@steve可能是因爲上面的代碼沒有執行而引發了一個較早的錯誤。 – 2010-11-17 17:41:34
它正在使用FireBug進行FF測試。 – wajiw 2010-11-17 17:42:11