为什么我可以使用数组破坏性赋值给一个引用,而不是对象破坏性赋值?[重复]

问题描述 投票:0回答:1

使用数组反构,我可以给一个引用赋值。

const o = {}
;[o['something']] = ['a', 'b', 'c']
console.log(o) // { something: 'a' }

但我不能用对象反构造来做同样的事. 为什么?

const o = {}
{ ['1']: o['something'] } = { '1': 'a' } // Syntax Error
javascript
1个回答
5
投票

你可以。问题是 { } 解释为 阻止 而不是一个对象的字面意思! 出于同样的原因,你不能写 { a: 1 }.a.

你可以用 parens 包裹整个语句,以避免这个问题(方法与 ({ a: 1 }).a 使得前面的例子可以使用)。)

const o = {}
;({ ['1']: o['something'] } = { '1': 'a' })
console.log(o) // { something: 'a' }

1
投票

变量的值可以通过使用括号与声明分开的方式进行反结构分配 ( ... ) 围绕着任务声明,像。

const o = {};
({ ['1']: o['something'] } = { '1': 'a' });

console.log( o )

如同前文所述 文件,

括号内的内容 ( ... ) 当使用没有声明的对象字面分解赋值时,需要在赋值语句的周围加上""。

{a, b} = {a: 1, b: 2} 不是有效的独立语法,因为 {a, b} 左手边的是一个块,而不是一个对象文字。

然而, ({a, b} = {a: 1, b: 2}) 是有效的,正如 const {a, b} = {a: 1, b: 2}

您的 ( ... ) 表达式前面需要加上分号,或者它可以用来执行前一行的函数。

© www.soinside.com 2019 - 2024. All rights reserved.