先看個實例
<input id='b1' type='button' value='按钮'/> <script> window.onload=function(){ var oBtn=document.getElementById("b1"); function mto(){ alert("123"); }; try //非IE { oBtn.attachEvent("onclick",mto,false); } catch(e)//IE { oBtn.addEventListener("click",mto,false); } }; </script>
注意的是:
addEventListener和attachEvent的差別在第一個參數 前者是click 後者是onclick
addEventListener 在其元素所在的元素作用域中運作
attachEvent在全域作用域中運作(this=window)
Try...Catch 語句
try...catch 可以測試程式碼中的錯誤。 try 部分包含需要執行的程式碼,而 catch 部分包含錯誤發生時執行的程式碼。
語法:
try { //在此运行代码 } catch(err) { //在此处理错误 }
注意:try...catch 使用小寫字母。大寫字母會出錯。
try...catch...finally 語句
為 JScript 實現錯誤處理。
try { tryStatements} catch(exception){ catchStatements} finally { finallyStatements}
=============
參數
tryStatement
必選項。可能發生錯誤的語句。
exception
必選項。任何變數名。 exception 的初始化值是丟出的錯誤的值。
catchStatement
可選項。處理在相關聯的 tryStatement 中發生的錯誤的語句。
finallyStatements
可選項。在所有其他過程發生之後無條件執行的語句。
說明
try...catch...finally 語句提供了一種方法來處理可能發生在給定程式碼區塊中的某些或全部錯誤,同時仍保持程式碼的運作。如果發生了程式設計師沒有處理的錯誤,JScript 只提供使用者它的普通錯誤訊息,就好像沒有錯誤處理一樣。
tryStatements 參數包含可能發生錯誤的程式碼,而 catchStatement 則包含處理任何發生了的錯誤的程式碼。如果在 tryStatements 中發生了一個錯誤,則程式控制被傳給 catchStatements 來處理。 exception 的初始化值是發生在 tryStatements 的錯誤的值。如果錯誤不發生,則不執行 catchStatements。
如果在與發生錯誤的 tryStatements 相關聯的 catchStatements 中無法處理該錯誤,則使用 throw 語句來傳播、或重新丟出這個錯誤給更進階的處理程序錯誤。
執行完 tryStatements 中的語句,並在 catchStatements 的所有錯誤處理發生後,且可無條件執行 finallyStatements 中的語句。
請注意,即使在 try 或 catch 區塊中回傳一個語句,或在 catch 區塊重新丟出一個錯誤,但一般將確保 finallyStatments 的運作,除非有未處理的錯誤。 (例如,在 catch 區塊中發生運作時錯誤。)。
範例
以下的範例闡明了JScript 特例處理是如何進行的。
try { print("Outer try running.."); try { print("Nested try running..."); throw "an error"; } catch(e) { print("Nested catch caught " + e); throw e + " re-thrown"; } finally { print("Nested finally is running..."); } } catch(e) { print("Outer catch caught " + e); } finally { print("Outer finally running"); } // Windows Script Host 作出该修改从而得出 WScript.Echo(s) function print(s){ document.write(s); }
將得到下列結果:
Outer try running..
Nested try running...
Nested catch caught an error
Nested finally is running...
Outer catch caught an error re-thrown
Outer finally running
如下是Javascript的例外處理的一個實例。
var array = null; try { document.write(array[0]); } catch(err) { document.writeln("Error name: " + err.name + ""); document.writeln("Error message: " + err.message); } finally{ alert("object is null"); }
程式執行過程
1. array[0]的時候因為沒有創建array數組,array是個空對象,程式中呼叫array[0]就會產生object is null的異常
2. catch(err)語句捕獲到這個異常通過err.name打印了錯誤類型,err.message打印了錯誤的詳細信息.
3. finally類似java的finally,無論有無異常都會執行.
現總結Error.name的六種值對應的資訊:
1. EvalError:eval()的使用與定義不一致
2. RangeError:數值越界
3. ReferenceError:非法或無法辨識的引用數值
4. SyntaxError:發生語法解析錯誤
5. TypeError:操作數型別錯誤
6. URIError:URI處理函數使用不當