这是一个非常常见且有用的做法:
// 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
或者是否存在任何理论上的障碍,为什么这不可能,而且永远不可能?
最佳答案
throw
只是一个语句;它可能不存在于需要表达式 的位置。出于类似的原因,您不能在此处放置 if
语句,例如
var something = false || if (cond) { /* something */ }
也是无效语法。
只有表达式(求值为一个值的东西)被允许分配给变量。如果你想throw
,你必须把throw
作为一个语句,这意味着你不能把它放在一项任务。
我想一种方法是在 ||
的右侧使用 IIFE,允许您在该函数的第一行使用语句:
var un = undefined
var v2 = un || (() => { throw new Error('nope') })();
但这很奇怪。我更喜欢显式的 if
- throw
。
关于javascript - 为什么逻辑或不能处理 JavaScript 中的错误抛出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54626074/