使用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"!
如何定义
b
?如果
mandatory
设置为非伪造值,如何调用a.b
并抛出自己的错误? 最佳答案
找到了解决方案。实际上,万一mandatory
的值是假的,对我来说b
函数调用是没有意义的。如果存在c
或d
,则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}"!`)
}
这不再给出参考错误。