为啥不能在对象键之后使用 Javascript 扩展运算符?

Posted

技术标签:

【中文标题】为啥不能在对象键之后使用 Javascript 扩展运算符?【英文标题】:Why can't Javascript spread operator be used after object key?为什么不能在对象键之后使用 Javascript 扩展运算符? 【发布时间】:2019-04-13 23:40:02 【问题描述】:

我有以下代码:

const array = [
    a: 'a',
    b: 'b'
  ];

  console.log(...array);

  const store = 
    obj: ...array
  

console.log 将打印结果就好了。但是,当尝试设置store 的密钥时,我得到了Parsing error: Unexpected token

...array 不是分配给storeobj 键的有效对象吗?

【问题讨论】:

【参考方案1】:

... 将数组展开为单个项目。数组可以有超过 1 个元素,因此会有超过 1 个 RHS,这将是无效的。因此,您可以使用obj : ...arrayobj : [...array]

const array = [a: 'a',b: 'b',c: 'c', d: 'd'];

console.log(...array);

const store = 
  obj: ...array,
  obj1: [...array]
;
  
  console.log(store);

【讨论】:

【参考方案2】:

spread 语法在对象内部或可迭代内部工作。在您的情况下,您需要在数组中传播元素。

Spread Syntax

扩展语法允许一个可迭代对象,例如一个数组表达式或字符串在需要零个或多个参数(用于函数调用)或元素(用于数组字面量)的地方扩展,或在需要零个或多个键值对(对于对象字面量)的地方扩展的对象表达式。

const array = [0, 1, 2]
const store = 
  obj: [...array] // <-- the array is being spreded into an array.


console.log(store)

【讨论】:

以上是关于为啥不能在对象键之后使用 Javascript 扩展运算符?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在自定义字段验证器中返回全局消息键?

为啥使用jQuery时不能通过window对象访问对象?

为啥我不能在 python 中使用列表作为 dict 键?

ajax post值到处理页面之后,为啥不能使用header跳转呢

使用非 ASCII 字符作为 JavaScript 对象键 [重复]

为啥有的图片能复制不能粘贴