【问题标题】:Prefer destructuring - already exisiting variable更喜欢解构 - 已经存在的变量
【发布时间】:2019-11-13 21:48:01
【问题描述】:

我的 linter 在解构方面给我带来了麻烦。


当我尝试解构时,它会让我出错,如下面的 sn-p :

const data = {
  status: 'example',
};

let status = 'foo';

{
  status,
} = data;

console.log(status);

当变量已经存在时,有什么方法可以使用解构吗?


再次使用let

const data = {
  status: 'example',
};

let status = 'foo';

let {
  status,
} = data;

console.log(status);

【问题讨论】:

  • Missing statement let -> let { status } = data; 这将引发错误,因为变量已经存在,所以这样做-> let { status: myOwnStatus } = data;
  • 嗯,实际上是一样的。只需添加括号。
  • 我表达得很糟糕。我的意思是没有适合我想做的答案。 @adiga 答案很完美
  • 但是在我链接的问题中有一个合适的答案。这是第一个答案,顺便说一句,这也是公认的答案。它说“只需在解构周围添加括号”。我将引用已接受答案的第二行:({x: oof.x, y: oof.y} = foo);

标签: javascript node.js ecmascript-6 eslint destructuring


【解决方案1】:

在解构周围添加括号

来自文档:Assignment without declaration

使用没有声明的对象字面量解构赋值时,赋值语句周围的括号 ( ... ) 是必需的。

{a, b} = {a: 1, b: 2} 不是有效的独立语法,因为左侧的 {a, b} 被视为块而不是对象字面量。

但是,({a, b} = {a: 1, b: 2}) 是有效的,var {a, b} = {a: 1, b: 2} 也是如此

您的 ( ... ) 表达式需要以分号开头,或者它可以用于执行上一行的函数。

const data = {
  status: 'example',
};

let status = 'foo';

({ status } = data);

console.log(status);

【讨论】:

  • 就是这样!非常感谢!这是一个诡计还是有真正的理由这样做?
  • 能否提供报价链接?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多