Answers:
它正在解构,但包含在参数中。不含解构的等效项为:
const func = o => {
var param1 = o.param1;
var param2 = o.param2;
//do stuff
}
这会将对象作为属性传递。
基本上是
let param1 = someObject.param1
let param2 = someObject.param2
下面是使用这种不带参数的技术的另一种方法,下面我们再考虑一下someObject确实包含那些属性。
let {param1, param2} = someObject;
这是一个对象销毁任务。像我一样,您可能会发现令人惊讶,因为ES6对象解构语法看起来像,但不像对象文字构造那样。
它支持您遇到的非常简洁的形式,以及重命名字段和默认参数:
本质上,它是{oldkeyname:newkeyname = defaultvalue,...}。':'不是键/值分隔符;'='是。
这种语言设计决定的一些后果是,您可能必须做类似的事情
;({a,b} = some_object);
多余的括号防止左花括号被解析为一个块,而前导分号防止括号被解析为对上一行函数的函数调用。
有关更多信息,请参见:https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
当心,在对象销毁分配期间的关键错误不会抛出;您只是得到“未定义”值,无论是键错误还是其他错误都悄悄传播为“未定义”。
> var {rsienstr: foo, q: bar} = {p:1, q:undefined};
undefined
> foo
undefined
> bar
undefined
>