首页 > 解决方案 > 为什么逻辑或不适用于 JavaScript 中的错误抛出?

问题描述

这是一种非常常见且有用的做法:

// default via value
var un = undefined
var v1 = un || 1

// default via a function call
var myval = () => 1
var v2 = un || myval()

但是在抛出错误时它不起作用(SyntaxError):

var v3 = un || throw new Error('un is not set!')

有没有办法以同样优雅的方式达到同样的效果?这是恕我直言很多样板代码:

if (!un) {
    throw new Error('un is not set!')
}
var v3 = un

还是有任何理论上的障碍,为什么这不可能,也永远不可能?

标签: javascript

解决方案


throw只是一个陈述;它可能不存在于需要表达式的位置。出于类似的原因,您不能在if那里发表声明,例如

var something = false || if (cond) { /* something */ }

也是无效的语法。

仅允许将表达式(评估为值的事物)分配给变量。如果你想throw,你必须作为throw一个语句,这意味着你不能把它放在赋值的右侧。

我想一种方法是在 的右侧使用 IIFE ||,允许您在该函数的第一行使用语句:

var un = undefined
var v2 = un || (() => { throw new Error('nope') })();

但这很奇怪。我更喜欢明确的if- throw


推荐阅读