【问题标题】:How do we throw and catch a RangeError, ReferenceError, TypeError in JavaScript?我们如何在 JavaScript 中抛出和捕获 RangeError、ReferenceError、TypeError?
【发布时间】: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)?

最好的。

【问题讨论】:

    标签: javascript exception-handling typeerror referenceerror


    【解决方案1】:

    这已经快一年了,但我认为迟到总比没有好。这取决于浏览器,但在某些情况下(coughcoughFIREfoxcough),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”是什么意思。请提供更多细节。

      【讨论】:

      • 偶然发现了这一点,我必须纠正你:new Array(-1) 无效。虽然您对索引不必为正数是正确的,但Array 构造函数的第一个参数是创建后数组中的元素数(全部默认为undefined)并且默认为零。显然,您不能创建一个包含少于 0 个元素的数组。 (也不是说在 Javascript 数组中使用负索引不会调整 length 属性,因为它表示已使用的最高正索引。这就是为什么在大多数情况下不允许它们是有意义的)
      猜你喜欢
      • 2013-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 2011-01-25
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      • 2017-05-24
      相关资源
      最近更新 更多