JS函数声明:在参数声明中赋予空对象的花括号对象

时间:2017-02-23 14:36:44

标签: javascript

这是代码,

export function createConnect({
    connectHOC = connectAdvanced,
    mapStateToPropsFactories = defaultMapStateToPropsFactories,
    mapDispatchToPropsFactories = defaultMapDispatchToPropsFactories,
    mergePropsFactories = defaultMergePropsFactories,
    selectorFactory = defaultSelectorFactory
} = {}) {...}

函数参数声明中{connectHOC = connectAdvanced ...} = {}是什么意思?

我知道

= {}

可能意味着函数参数的默认值,但是前面括号内代码的用法是什么?

2 个答案:

答案 0 :(得分:8)

这是ES2015语法。您的函数声明将Destructuring assignment与默认值组合在一起。

这是使用对象的基本解构分配:



var {a, b} = {a: "foo", b: "bar"};
console.log(a); // "foo"
console.log(b); // "bar"




您可以在左侧添加默认值:



var {a = "foo", b = "bar"} = {};
console.log(a); // "foo"
console.log(b); // "bar"




当你在声明一个函数时命名参数时,你不能使用var,而对象解构它将是相同的:



function test({a = "foo", b = "bar"}){
    console.log(a + b);
}
test({}); // "foobar"
test({b: "boo"}); // "fooboo"




当然,你可以定义一个默认值,这样你的函数就不必采用任何参数。



function test({a = "foo", b = "bar"} = {}){
    console.log(a + b);
}
test(); // "foobar"




答案 1 :(得分:3)

它只是使用解构来执行默认参数的方式。您需要最后一位作为默认值。

请考虑以下内容,例如该示例使用destructuring assignment



function withDefault({parameter=something} = {}) {
 console.log(parameter)
}

let something = 1;
withDefault();




与缺少默认值的那个相比,它会抛出错误:



function withoutDefault({parameter=something}) {
 console.log(parameter)
}

let something = 1;
withoutDefault();
// It needs to be called as withoutDefault({}), withoutDefault(1) or
// with some value, since the function signature doesn't define a default
// in this case.




相关问题