【问题标题】:Using and catching RangeError in javascript在 javascript 中使用和捕获 RangeError
【发布时间】:2013-12-19 18:22:21
【问题描述】:

我即将使用 RangeError 引发异常,并想检查我是否正确使用它以及如何最好地捕获它。

我有一个函数可以像这样抛出 RangeError 或 TypeError

function saveNumber(val) {
  // Only accept numbers.
  if (typeof val !== 'number') {
    throw new TypeError();
  }

  // Error if the number is outside of the range.
  if (val > max || val < min) {
    throw new RangeError();
  }

  db.save(val);
}

我想调用它并且只处理 RangeError。最好的方法是什么?

【问题讨论】:

  • 只是不要抛出 TypeError 吗?
  • 另一段代码可能想调用这个函数并处理TypeError

标签: javascript try-catch


【解决方案1】:
try {
  saveNumber(...);
} catch (e) {
  if (e instanceof TypeError) {
    // ignore TypeError
  } 
  else if(e instanceof RangeError) {
    // handle RangeError
  }
  else {
    // something else
  } 
}

source

【讨论】:

  • 一般情况下不处理需要重新投掷。
【解决方案2】:

直接来自MDN documentation on try - catch

try {
    saveNumber(...);
} catch (e is instanceof RangeError) {
    // Do something
} catch (e) {
    // re-throw whatever you don't want to handle
    throw e;
}

【讨论】:

  • JS 提示抱怨 'catch filter' 仅在 Mozilla JavaScript 扩展中可用(使用 moz 选项)'。所以这是一个不错的答案,但并不完全兼容。
  • 来自同一个文档:“提醒:此功能不是 ECMAScript 规范的一部分。”
【解决方案3】:

稍微优雅一点的答案:

switch (error.constructor) {
    case NotAllowedError:
        return res.send(400);
    case NotFoundError:
        return res.send(404);
    default:
        return res.send(500);
}

【讨论】:

    猜你喜欢
    • 2011-03-19
    • 2021-09-27
    • 2012-03-18
    • 1970-01-01
    • 2014-05-28
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    相关资源
    最近更新 更多