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
。
推荐阅读
- java - 如何使用firestore中的图像url从firebase存储中获取图像
- c++ - 为什么当增加通过 TCP 发送的消息速率时,请求-响应消息对的延迟会减少?
- javascript - 无法在控制器中获取从 ajax 发送的任何数据
- php - 使用 PHP PDO 搜索
- spring-boot - Apache Camel 设置 privateKey SFTP
- shiny - 使持久本地存储中的数据可编辑
- dns - 如何使用域名而不是 ip:port 方式访问树莓派上的不同服务?
- javascript - 具有绝对路径的节点 fs.writefile
- python - 从 Vivino.com 抓取数据
- sql - 我们如何在 Oracle GV$SESSION 视图中识别会话?