我们如何在 JavaScript 中抛出和捕获 RangeError、ReferenceError、TypeError?
Posted
技术标签:
【中文标题】我们如何在 JavaScript 中抛出和捕获 RangeError、ReferenceError、TypeError?【英文标题】:How do we throw and catch a RangeError, ReferenceError, TypeError in JavaScript? 【发布时间】:2011-03-19 23:47:15 【问题描述】:我想知道你们中是否有人尝试过使用 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)?
最好的。
【问题讨论】:
【参考方案1】:这已经快一年了,但我认为迟到总比没有好。这取决于浏览器,但在某些情况下(cough、cough、FIREfox、cough),RangeError 会继承Error 对象的 message 属性,而不是提供它自己的属性。恐怕唯一的解决方法是抛出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');
不过,我不确定您所说的“TypeError”是什么意思。请提供更多细节。
【讨论】:
developer.mozilla.org/en/Core_JavaScript_1.5_Reference/… 偶然发现了这一点,我必须纠正你:new Array(-1)
无效。虽然您对索引不必为正数是正确的,但Array
构造函数的第一个参数是创建后数组中的元素数(全部默认为undefined
)并且默认为零。显然,您不能创建一个包含少于 0 个元素的数组。 (也不是说在 Javascript 数组中使用负索引不会调整 length
属性,因为它表示已使用的最高正索引。这就是为什么在大多数情况下不允许它们是有意义的)以上是关于我们如何在 JavaScript 中抛出和捕获 RangeError、ReferenceError、TypeError?的主要内容,如果未能解决你的问题,请参考以下文章