考虑以下代码:
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
对象包装器中,并尝试同时获取a
和b
属性,因为它们始终为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
尝试引用它时,如果未定义a
,a
尚未被解构和知道。关于javascript - 具有默认值分配的ES6对象解构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49289180/