如何在JavaScript中抛出和捕获RangeError、ReferenceError和TypeError?

如何在JavaScript中抛出和捕获RangeError、ReferenceError和TypeError?,javascript,exception-handling,typeerror,referenceerror,Javascript,Exception Handling,Typeerror,Referenceerror,我想知道你们中是否有人尝试过使用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) { al

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


最好。

实际上,JavaScript中的数组索引不需要为正,因为这里的数组本质上是哈希表。如果您试图访问数组中不存在的密钥,结果将是
未定义的

您可以通过一个简单的条件捕捉到这一点:

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

不过,我不知道你说的“打字错误”是什么意思。请提供更多细节。

这已经快一年了,但我认为晚做总比不做好。它取决于浏览器,但在某些情况下(cough、cough、FIREfox、cough),RangeError继承错误对象的message属性,而不是提供它自己的属性。恐怕唯一的解决办法是抛出新错误(“必须是肯定的!”)。很抱歉。

刚刚提到这一点,我必须纠正您:
新数组(-1)
无效。虽然关于索引不必为正的说法是正确的,
数组
构造函数的第一个参数是创建后数组中的元素数(所有默认值均为
未定义
),默认值为零。显然,不能创建元素少于0的数组。(也不是说在Javascript数组中使用负索引不会调整
length
属性,因为它指示已使用的最高正索引。这就是为什么在大多数情况下不允许使用它们的原因)