大括号里面的函数参数列表在es6中做了什么?

时间:2016-06-06 15:24:20

标签: javascript ecmascript-6

我在代码库中一直看到这样的功能:

const func = ({ param1, param2 }) => {
  //do stuff
}

这究竟是做什么的?我很难在谷歌上找到它,因为我甚至不确定这是什么,或者如何在谷歌搜索中描述它。

3 个答案:

答案 0 :(得分:85)

它是destructuring,但包含在参数中。没有解构的等价物将是:

const func = o => {
    var param1 = o.param1;
    var param2 = o.param2;
    //do stuff
}

答案 1 :(得分:5)

这是将对象作为属性传递。

它基本上是简写 const param1 = someObject.param1 const param2 = someObject.param2

使用不带参数的这种技术的另一种方法如下,让我们考虑一下someObject确实包含那些属性。 const {param1, param2} = someObject;

答案 2 :(得分:1)

这是一个对象分解任务。像我一样,您可能会感到惊讶,因为ES6对象解构语法看起来像,但行为却不像对象文字构造。

它支持您遇到的非常简洁的形式,以及重命名字段和默认参数:

本质上,它是{oldkeyname:newkeyname = defaultvalue,...}。 ':'不是键/值分隔符; '='是。

此语言设计决定的一些后果是,您可能必须做类似

的操作
  

;({{a,b} = some_object);

多余的括号防止左花括号被解析为块,而前导分号防止括号被解析为对上一行函数的函数调用。

有关更多信息,请参见: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

当心,在对象销毁分配期间不会发生关键错误;您只是得到“未定义”值,无论是键错误还是默默传播为“未定义”的其他错误。

> var {rsienstr: foo, q: bar} = {p:1, q:undefined};
undefined
> foo
undefined
> bar
undefined
>