javascript - 为什么逻辑或不能处理 JavaScript 中的错误抛出?

标签 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

或者是否存在任何理论上的障碍,为什么这不可能,而且永远不可能?

最佳答案

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/

相关文章:

javascript - 又是: how can I read a file using javascript

javascript - jquery - Fancybox 两次显示第一张图片

javascript - 有没有办法检测可观察对象的嵌套结构的任何元素是否已更改?

javascript - ng-repeat 没有出现在 ionic 中

javascript - jQuery 单选按钮仅选择一个(ID)

javascript - addEventListener e=> 是什么意思?

javascript - 访问 Google Firestore 集合的最后 N 个文档

javascript - 网络驱动程序错误: Cannot find elements when the xpath expression is null in javascript

javascript - Angularjs 选择组和初始值

javascript - 有没有办法包装 jQuery 的 isArrayLike?