javascript - 使用函数设置变量值的单行代码,如果为假则抛出异常

标签 javascript json exception

我发现自己在处理可能损坏或未损坏的 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/

相关文章:

.net - TryFoo是否应该抛出异常?

javascript - react : Unterminated JSX contents

javascript - 将 JSON 对象的一部分存储在 JavaScript 变量中

java - 如何将 JSON 字符串反序列化为放宽根值区分大小写的对象?

java.lang.NumberFormatException : Invalid int: "1"

c# - 收到 TypeInitializationException

javascript - wkhtmltopdf 超时错误

Javascript setTimeout 和重定向 - IE 卡住

javascript - 如何使用 CSS/JS 使等距网格在背景上居中

php - 将 2 个 sql 值添加到数组中