我发现自己在处理可能损坏或未损坏的 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 expressions 的提案这将允许您真正简洁地完成此操作,但它仍处于第 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`);
}
关于javascript - 使用函数设置变量值的单行代码,如果为假则抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59389323/