w3schools說例外可以是字符串,整數,布爾值或對象,但給出的例子並不是我的良好做法,因爲異常類型檢查是通過字符串比較完成的。這是JavaScript中異常處理的首選方法嗎?是否有內置的異常類型(如NullPointerException)? (如果是這樣,他們是什麼,他們使用什麼樣的繼承,而且他們比其他選項更受歡迎?)拋出JavaScript異常的標準做法是什麼?
回答
例外可以是任何你喜歡的。
在其他語言中,異常應該是實例,然後catch
語句會選擇要捕獲哪些異常並讓實例的類落入哪些異常。
但是,JavaScript不具備此功能。您只能捕獲所有例外,然後查看該值以決定如何處理它。如果您不想處理異常,則必須手動重新捕獲捕獲的值。 (這不可避免地使得catch
陳述相當混亂。)
您可以決定將您的例外作爲對象實施並與instanceof
進行比較。或者你可以有獨特的不透明值進行比較。或者如果你真的想要的話,你甚至可以直接扔掉字符串或數字。
是否有內置的異常類型(如NullPointerException)?
的種類。 ECMAScript定義了一些標準錯誤類別:Error
及其子類型EvalError
,RangeError
,ReferenceError
,SyntaxError
,TypeError
,URIError
。但是有瀏覽器實現問題,例如try { nonexistentvar; }
在IE下給出TypeError
而不是ReferenceError
。還有很多其他瀏覽器特定的異常,特別是在處理DOM時。
直接使用這些對象並不是傳統的方法,並且試圖對它們進行子類化是很麻煩的(因爲JavaScript沒有類系統)。您會傾向於使用自己定義的例外來替代自己的應用。例外情況並非在JavaScript中廣泛使用。
您可以試試Dean Edwards的Base project。它模仿JavaScript中的類繼承,因此使用它可以使您繼承Error類型。您無法在javascript中捕獲不同類型的錯誤(因爲它不是強類型語言),但您可以確定拋出的錯誤類型,併爲該特定類型添加邏輯,如下所示:
try {
// do something
} catch (e) {
if (e instanceof NullPointerError) {
// handle nullpointer exception
} else if (e instanceof RuntimeError) {
// handle runtime exception
} else {
// regular exception
}
}
當然,在這段代碼中,我假設你已經聲明瞭NullPointerError和RuntimeError類作爲Error的子類。
ECMA-262 specification的第15.11節定義了幾個「Error
」類型,它們在運行時錯誤發生時作爲異常拋出......它們也可以作爲用戶定義的異常類的基礎對象。該規範還定義了six other error types這是該語言的一部分。
因爲它更容易確定它們的類型,所以似乎最好拋出這些類型的異常(或從它們派生的類型);他們也有一個內置的消息屬性。
根據我自己的經驗,try/catch塊有點罕見,並且感覺非常特殊,而不像Java中那樣不可避免。
- 1. 什麼是拋出異常
- 2. 是「拋出異常」不好的做法?
- 3. parseuser.SignUpAsync()拋出什麼異常?
- 4. Newtonsoft.Json.DeserializeObject拋出什麼異常?
- 5. 工廠方法 - 拋出什麼異常
- 6. Netty異常處理 - Handler拋出異常,那麼是什麼?
- 7. System.out.println()不拋出異常,但System.in.read()拋出異常,爲什麼?
- 8. 什麼是替代拋出異常的目標c
- 9. 在accept()方法中拋出異常的目的是什麼?
- 10. 什麼異常的類型拋出
- 11. 寫一個除了拋出異常什麼都不做的方法是不好的做法嗎?
- 12. 爲什麼在.net 2.0中拋出null引用異常而不是無效的異常拋出異常(如:int)?
- 13. 編程概念:拋出異常時應該做什麼?
- 14. 爲什麼TimeZone.getTimeZone()拋出異常
- 15. 什麼時候應該拋出異常?
- 16. 什麼時候拋出java異常
- 17. TweetSharp爲什麼拋出異常?
- 18. 爲什麼Image.Save(Stream,ImageFormat)拋出異常?
- 19. 爲什麼java拋出異常java.lang.ArrayIndexOutOfBoundsException:1
- 20. 爲什麼異常不會被拋出?
- 21. 爲什麼Matcher.group拋出IndexOutOfBoundsException異常
- 22. JSON和Eclipse - 爲什麼拋出異常?
- 23. ServerSocket.close()。它什麼時候拋出異常?
- 24. 爲什麼在這裏拋出異常?
- 25. 爲什麼這會拋出異常?
- 26. 爲什麼Log4Net從不拋出異常
- 27. 爲什麼`JSON.parse`不拋出異常?
- 28. 爲什麼會resources.getStringArray(int)拋出異常?
- 29. 枚舉拋出concurrentModification異常。爲什麼?
- 30. 混淆什麼時候拋出異常
你可能會發現這個問題有幫助:http://stackoverflow.com/questions/783818/how-do-i-create-a-custom-error-in-javascript – Adam 2010-05-13 08:56:03