在我正在处理的代码库中,我不断看到如下所示的函数:
const func = ({ param1, param2 }) => {
//do stuff
}这到底是在做什么?我很难在谷歌上找到它,因为我甚至不确定这叫什么,或者如何在谷歌搜索中描述它。
发布于 2016-06-06 23:29:28
它是destructuring,但包含在参数中。没有解构的等价物将是:
const func = o => {
var param1 = o.param1;
var param2 = o.param2;
//do stuff
}发布于 2016-06-06 23:30:49
这是将对象作为属性进行传递。
它基本上是以下的简写
let param1 = someObject.param1
let param2 = someObject.param2不带参数使用此技术的另一种方法如下所示,让我们花点时间考虑一下someObject确实包含这些属性。
let {param1, param2} = someObject;发布于 2019-10-31 19:33:52
这是一个对象解构赋值。和我一样,您可能会感到惊讶,因为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
> https://stackoverflow.com/questions/37661166
复制相似问题