3

我想知道你们中是否有人尝试过使用 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 对象?

因为我在 alert(error.message) 的代码示例没有显示用户定义的“必须是肯定的”消息。

我能做些什么来抛出我自己的 RangeError 对象(和 ReferenceError、TypeError )?

最好的。

4

2 回答 2

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');
}

不过,我不确定您所说的“TypeError”是什么意思。请提供更多细节。

于 2010-07-23T08:50:31.987 回答
2

这已经快一年了,但我认为迟到总比没有好。它取决于浏览器,但在某些情况下(咳嗽咳嗽火狐咳嗽), RangeError 继承了 Error 对象的 message 属性,而不是提供它自己的属性。恐怕唯一的解决方法是抛出new Error("must be positive!"). 对不起。

于 2011-06-15T17:25:40.883 回答