【问题标题】:Is there way to throw an exception from an expression besides using functions?除了使用函数之外,还有没有办法从表达式中抛出异常?
【发布时间】:2014-07-18 14:16:32
【问题描述】:

除了将 throw 放置在函数包装器之外,还有其他方法可以从 JavaScript 中的表达式显式抛出异常吗?

throw 是一个语句,语句不产生值,因此它们不能用于对值进行操作并始终产生值的表达式中。很明显,任何语句都可以放在函数中,并且可以从表达式中使用函数调用。有没有办法避免将throw 语句包装到函数中并直接从表达式中抛出?

更新:

有些人说我不太清楚我在问什么。考虑一个假设的例子(不是真实的),这是我希望的工作,但它没有:

var one = value != null ? value * value : (throw new Error('The value has not been provided'));

var two = value != 0 ? 1 / value : (throw new Error('The result cannot be evaluated because the value is zero which would give a division by zero problem.));

【问题讨论】:

  • 您的真正问题尚不清楚。 <script>throw 0</script> 怎么了?
  • 你能举个例子或澄清你的意思吗?
  • 为什么要直接从表达式中throw?你只会抛出一些条件——那么为什么不使用 if/elsetry/catch 块?...你要求单行检查吗?
  • 注意:我要求澄清,我并不是说这个问题不好。所以... +1。
  • 更新了几个假设的例子。

标签: javascript expression statements


【解决方案1】:

没有。正如你所说,throw 是一个语句,语句不能作为表达式的一部分出现。

从表达式求值中执行语句的唯一方法是函数调用或eval。使用THROW(new Error(…)) 函数可能是你能得到的最好的。

但说真的,请使用简单易读的语句:

if (value == null) throw new Error('The value has not been provided');
var one = value * value;

if (value == 0) throw new Error('division by zero");
var two = 1 / value;

这不仅可行,而且可以排成一行。

【讨论】:

  • 是否存在与抛出的throw 语句对应的表达式?
  • 没有。有一些表达式在求值过程中会抛出类型错误等,但没有与throw 对应的表达式。
【解决方案2】:

是的,您可以从三元组中抛出!也许有些人可能会称我的解决方案有点 hack,但推理起来很简单。

throw from a ternary

var two = value != 0 ? 1 / value : (void 0).throwDivideByZero()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多