考虑以下代码:

const log = ({a,b=a}) => console.log(a,b);
log({a:'a'})


变量b分配了值a。将其转换为es5时确实可以使用,但是我不确定这是否为有效的es6语法。

我可以在变形对象中执行这种默认值分配吗?

最佳答案

const log = ({a,b=a}) => console.log(a,b);
log('a')


在语法上是有效的,但在语义上是无效的,因为您要解构字符串原语,将其装箱到临时的String对象包装器中,并尝试同时获取ab属性,因为它们始终为undefined包装器对象是临时的,仅出于操作触发装箱本身的目的而创建。

这样,您在调用undefined, undefined时就会得到它。

具有默认值的解构操作可能在语义上有效
在您的情况下,像这样的通话:

const log = ({a,b=a}) => console.log(a,b);
log({a: 'a'}) // a,a


UPD:

但是请注意,提供默认值的顺序很重要,因此这不会
工作

const log = ({a=b,b}) => console.log(a,b);
log({a: 'a'}) // error


因为解构发生在参数对象初始化之后,并且从左到右进行求值,所以在我们解构b尝试引用它时,如果未定义aa尚未被解构和知道。

关于javascript - 具有默认值分配的ES6对象解构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49289180/

10-11 16:59