2010-07-23 37 views
3

我想知道你們中的任何人是否嘗試過使用JavaScript的異常處理機制來捕獲RangeError,ReferenceError和TypeError等錯誤?我們如何在JavaScript中引發並捕獲RangeError,ReferenceError,TypeError?

例如,對於引發RangeError:

try { 
var anArray = new Array(-1); 
// an array length must be positive 

     throw new RangeError("must be positive!") 
} 
catch (error) { 
     alert(error.message); 
     alert(error.name); 
} 
finally { 
     alert("ok, all is done!"); 
} 

在上述情況下,我是拋出一個新的RangeError對象?

因爲我的代碼示例在警報(error.message)不顯示用戶定義的消息「必須是正面的」。

我該怎麼做才能拋出我自己的RangeError對象(和ReferenceError,TypeError)?

最好。

回答

2

這已經快一歲了,但我從來沒有比從未更好過。這取決於瀏覽器,但在某些情況下(咳嗽咳嗽FIREFOX咳嗽),引發RangeError繼承了Error對象的信息屬性,而不是提供它自己的。恐怕唯一的解決方法是扔new Error("must be positive!")。抱歉。

2

實際上,JavaScript中的數組索引不需要是正數,因爲數組本質上是哈希表。如果您嘗試訪問數組中不存在的鍵,則結果將僅爲undefined

可以趕上一個簡單的條件:

if (typeof someArray[foo] !== "undefined") { 
    //do stuff 
} else { 
    //do error handling 
    //Here I'm just throwing a simple exception with nothing than a message in it. 
    throw new Error('something bad happened'); 
} 

我不知道你所說的「類型錯誤」的意思,雖然。請給一些更多的細節。

+0

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/TypeError – DjangoRocks 2010-07-24 15:49:15

+0

只是在這一點上,我必須糾正你:'new Array(-1)'是無效的。雖然你正確地指出索引不必是肯定的,但Array的構造函數的第一個參數是在創建之後數組中的元素的數量(所有默認爲undefined)並且默認爲零。顯然你不能創建一個數組少於0的數組。 (在JavaScript數組中不使用負指數也不會調整'length'屬性,因爲它指示已經使用的最高正指數,這就是爲什麼它在大多數情況下是合理的,因此不允許它們) – 2016-05-21 05:30:39

相關問題