首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不带var、let或const的对象解构

不带var、let或const的对象解构
EN

Stack Overflow用户
提问于 2014-12-10 02:32:05
回答 3查看 11.3K关注 0票数 131

如果前面没有var关键字,为什么对象解构会抛出错误?

代码语言:javascript
复制
{a, b} = {a: 1, b: 2};

抛出SyntaxError: expected expression, got '='

以下三个示例可以正常工作

代码语言:javascript
复制
var {a, b} = {a: 1, b: 2};
var [c, d] = [1, 2];
    [e, f] = [1, 2];

额外的问题:为什么我们不需要var来进行数组解构?

我在做一些像这样的事情时遇到了问题

代码语言:javascript
复制
function () {
  var {a, b} = objectReturningFunction();

  // Now a and b are local variables in the function, right?
  // So why can't I assign values to them?

  {a, b} = objectReturningFunction();
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-10 02:38:41

该问题源于JavaScript中具有多种含义的{...}运算符。

{出现在语句的开头时,它总是代表一个不能赋值的block。如果它稍后在语句中以表达式的形式出现,那么它将表示一个对象。

由于不能像grouping parenthesis一样后面跟语句,因此var有助于实现这一区别

代码语言:javascript
复制
( {a, b} = objectReturningFunction() );

来自他们的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Assignment_without_declaration

注释:括号( ... )当使用不带声明的对象字面解构赋值时,赋值语句的周围是必需的。

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

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

你的( ... )表达式的前面必须有分号,或者它可以用来执行上一行的函数。

票数 195
EN

Stack Overflow用户

发布于 2019-05-10 06:57:58

如果您编写的Javascript没有使用分号,那么“assignment without assignment”语法应该在前面加上一个分号,这样才能正常工作

代码语言:javascript
复制
let a, b

;({a, b} = objectReturningFunction()) // <-- note the preceding ;

我只想强调这一点,因为它抓住了我,并希望可以节省其他人一些时间来弄清楚为什么它不工作和/或产生奇怪的结果与代码格式化程序,如prettier

事实上,它实际上就在公认的答案中(引用的文档的最后一行),但很容易遗漏,特别是在没有看到示例的情况下!

票数 41
EN

Stack Overflow用户

发布于 2020-07-11 20:35:09

这里有另一种方法:

代码语言:javascript
复制
let {} = {a, b} = objectReturningFunction()

优点:

  • 不需要括号
  • 不需要分号
  • 额外的赋值保证是无操作(假设没有奇怪的事情发生-而且,您的代码转换程序可能没有意识到这一点)

缺点:

  • 看起来有点奇怪,尽管在我看来,没有比!(){...}() IIFE.
  • Might更奇怪的了,它为什么会出现在那里。它保证人们在第一次相遇时就会被抛弃,所以我建议不要把它作为一次性的。
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27386234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档