javascript - 使用默认值解构嵌套对象,包括 Node

标签 javascript node.js ecmascript-6

使用 ECMAScript 6,我可以这样写:

const {
  a = mandatory('a'),
  b: {
    c = mandatory('c'),
    d = mandatory('d')
  } = mandatory('b')
} = { a: 'a', b: { c: 'c', d: 'd' } }
console.log(a, b, c, d)

function mandatory (field) {
  throw new Error(`Not giving you a ReferenceError today, but you must set a non-falsy value to "${field}"!`)
}

mandatory 是一个使用“默认语法”的函数,并在属性设置为虚假值时抛出“已知”错误。

当我运行代码时,我收到一个ReferenceError: b is not Defined。如果我删除 d: 'd' 它突然不再抛出错误。

... = { a: 'a', b: { c: 'c' } }

它抛出一个期望的错误:

Error: Not giving you a ReferenceError today, but you must set a non-falsy value "d"!
  1. 如何定义 b
  2. 如果 a.b 设置为非虚假值,我如何调用 mandatory 并抛出我自己的错误?

最佳答案

找到了解决方案。实际上,在 b 具有虚假值的情况下进行 mandatory 函数调用对我来说是没有意义的。如果cd确实存在,b将是非假的。

但是要定义b以供进一步处理,可以这样做:

const {
  a = mandatory('a'),
  b, // Added this line
  b: {
    c = mandatory('c'),
    d = mandatory('d')
  }
} = { a: 'a', b: { c: 'c', d: 'd'} }
console.log(a, b, c, d)

function mandatory (field) {
  throw new Error(`Not giving you a ReferenceError today, but you must set "${field}"!`)
}

这不再给出引用错误。

关于javascript - 使用默认值解构嵌套对象,包括 Node ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41686211/

相关文章:

javascript - 使用 express 时在 EJS View 中查找当前 url

reactjs - webpack:SASS 加载器失败 "Module build failed (from ./node_modules/sass-loader/lib/loader.js)"

javascript - ES6 中将对象映射到对象数组

javascript - Lodash mixin 无法在 JavaScript 类中工作

javascript - 如何在 Three.js 中启用着色

javascript - 为什么 Math.random() 不断更新 onClick?

javascript - 如何从每个函数中获取对象

javascript - 选择选项后删除选择占位符

javascript - 如何在 for 循环中使用 mongoose 函数?

javascript - 将同步代码插入异步代码