我试图弄清楚是否有一种方法可以使用默认参数的对象解构而不必担心对象被部分定义.考虑以下:
(function test({a, b} = {a: "foo", b: "bar"}) {
console.log(a + " " + b);
})();Run Code Online (Sandbox Code Playgroud)
{a: "qux"}例如,当我打电话给我qux undefined时,我会在控制台中看到我真正想要的东西qux bar.有没有办法实现这一点,而无需手动检查所有对象的属性?
我正在使用es6对象解构来为函数提供默认参数.
function mapStateToProps({ shops: { cakeShop: {}, pieShop: {} }) {
return {
CakeShopName: shops.cakeShop.Name,
PieShopName: shops.pieShop.Name
}
}
Run Code Online (Sandbox Code Playgroud)
上面的问题是,如果我打电话
mapStateToProps({})
Run Code Online (Sandbox Code Playgroud)
代码抛出Cannot read property 'Name' of undefined.嵌套对象shops未设置为其默认值,并且代码具有空引用.
如何确保将嵌套对象shops设置为正确的默认值,即使shops自身已定义?
这是代码,
export function createConnect({
connectHOC = connectAdvanced,
mapStateToPropsFactories = defaultMapStateToPropsFactories,
mapDispatchToPropsFactories = defaultMapDispatchToPropsFactories,
mergePropsFactories = defaultMergePropsFactories,
selectorFactory = defaultSelectorFactory
} = {}) {...}
Run Code Online (Sandbox Code Playgroud)
什么{connectHOC = connectAdvanced ...} = {}意味着在函数参数声明中?
我知道
= {}
Run Code Online (Sandbox Code Playgroud)
可能意味着函数参数的默认值,但是前面括号内代码的用法是什么?
嗨,我在这里通过函数参数Object Destructuring Demo经历了对象解构的使用示例
function drawES6Chart({size = 'big', cords = { x: 0, y: 0 }, radius = 25} = **{}**) {
console.log(size, cords, radius);
// do some chart drawing
}
// In Firefox, default values for destructuring assignments are not yet
implemented (as described below).
// The workaround is to write the parameters in the following way:
// ({size: size = 'big', cords: cords = { x: 0, y: 0 }, radius: radius =
25} = **{}**)
drawES6Chart({ …Run Code Online (Sandbox Code Playgroud)