javascript - 使用函数设置变量值并在其为假时抛出的单行器
问题描述
在处理可能已损坏或未损坏的 json 数据时,我发现自己经常使用以下模式:
function getFooId(json) {
const id = json.foo.id;
if (!id) {
throw Error(`foo.id has not been defined`);
}
return id;
}
这似乎过于冗长。我想要一个单线:
function getBarId(json) {
return json.bar.id? json.bar.id : throw Error(`bar.id has not been defined`);
}
这可以做到吗?
解决方案
有一个关于throw 表达式的提议,可以让你非常简洁地做到这一点,但它仍处于第 2 阶段 - 它尚未实现。
目前,throw
必须是语句,如if
语句或函数声明 - 它不能在表达式上下文中。为此,您可以将id
变量替换为 IIFE,其中 IIFE 的第一(也是唯一)行抛出;
function getBarId({ bar: { id }}) {
return id || (() => { throw new Error(`bar.id has not been defined`); })();
}
但我还是更喜欢你的第一种方法,它更具可读性:
function getBarId({ bar: { id }}) {
if (id) return id;
throw new Error(`bar.id has not been defined`);
}
推荐阅读
- sql - 从 JSON 数组字段中查找和/或删除某些元素的 PostgreSQL 查询
- c - 函数参数是相对于 rbp 的负偏移量(据我所知,它们应该是正偏移量)
- java - 使用 Eclipse Java Neon 重新加载工作区失败
- php - 透视 mysql 结果集并创建 html 表/矩阵
- json - 如何在 Java 8 中执行条件映射?
- docusignapi - DocuSign 上的多租户
- flutter - 如何在应用栏颤动中居中图像?
- sql - 需要在oracle中查询下面的正则表达式
- python - 根据另一个数据框的索引和列将数据框单元格替换为 NaN
- javascript - Router.use() 需要一个中间件函数,但是有一个未定义的。如何解决这个问题?