我在代码库中一直看到这样的功能:
const func = ({ param1, param2 }) => {
//do stuff
}
这究竟是做什么的?我很难在谷歌上找到它,因为我甚至不确定这是什么,或者如何在谷歌搜索中描述它。
答案 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
>