【发布时间】:2019-09-04 18:02:48
【问题描述】:
这是一种非常常见且有用的做法:
// 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
或者是否存在任何理论上的障碍,为什么这不可能,也永远不可能?
【问题讨论】:
-
这看起来很像 PHP(或 Ruby?),您通常会在其中执行类似
$dbHandle = connectToDB() OR die("couldn't connect")的操作。不过,我不记得 PHP 是否允许throw语句作为该构造的一部分。 -
@VLAZ
die()看起来像一个函数。函数也是 JavaScript 中的表达式。 -
当然,但我说的是“一行错误”的一般模式。它让我想起了很多你在 PHP 中是如何做到这一点的——
do() OR die()很常见,至少在我编写 PHP 时是这样。试图在与另一个表达式相同的行中抛出一个异常让我印象深刻。 -
除了答案:还有a proposal 让这成为可能,所以也许很快我们就会有
throw表达式。 -
@vsemozhetbyt 感谢您的评论,这是我问题的实际答案!
标签: javascript