在先前声明的变量上进行解构赋值,得到短绒毛错误“意外令牌=”

时间:2019-10-21 16:14:13

标签: javascript eslint

let data = []
let count, meta
if (req.params.id === 'count') {
  // get count only
} else {
  { data, count } = await myModel.find(filter, options)
  meta = { count }
}

给了我一个linter错误:“解析错误:销毁分配时出现意外的令牌=”。这只是我需要更改的linter配置中的设置吗?

我可以使用括号消除错误,但是为什么要这样做?

({ data, count } = await myModel.find(filter, options))

1 个答案:

答案 0 :(得分:1)

任何以{ ... }开头的语句将始终将带括号的序列解析为代码块而不是对象(包括解构对象表达式)。

MDN在其documentation on destructuring中阐明了这种确切情况:

var a, b;

({a, b} = {a: 1, b: 2});
     

注意:使用不带声明的对象文字解构分配时,需要在赋值语句周围加上括号( ... )

     

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

     

不过,({a, b} = {a: 1, b: 2})var {a, b} = {a: 1, b: 2}都是有效的

     

您的( ... )表达式必须以分号开头,或者可以将其用于执行上一行的函数。