首页 > 解决方案 > 使用函数设置变量值并在其为假时抛出的单行器

问题描述

在处理可能已损坏或未损坏的 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`);
}

这可以做到吗?

标签: javascriptjsonexception

解决方案


有一个关于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`);
}

推荐阅读