【问题标题】:Destructure and assign to new variable at the same time not working同时解构并分配给新变量不起作用
【发布时间】:2016-04-23 17:29:54
【问题描述】:

我正在尝试解构对象并同时将其分配给新变量:

let {x} = a = {x: 'cool'};
console.log(a, x);

哪个输出:

//Object { x: "cool" } cool - in Firefox
//ReferenceError: a is not defined - in Chrome, babel-node

为什么会有差异,正确的行为是什么?

更新:

这可能是更通用的用例。虽然这适用于所有环境:

var a = b = {x: 'cool'};

此语句在 chrome/babel-node 中不起作用:

var {x} = a = {x: 'cool'}; //SyntaxError: Unexpected token {

使用var 代替let 时也会出现不同的错误消息。

【问题讨论】:

  • 问题是,正如错误消息所说,a 没有定义。 let a = b = c定义b。 Firefox 可能会为您做一些默认声明,例如在控制台中。
  • @torazaburo 是正确的。但是 let a = b = c 在 firefox 中是可能的(不是在 chrome 中)
  • 对我来说,在 babel-node var a = b = {x: 'cool'}; 中给出了一个 ReferenceError,当然应该如此。 letvar 之间错误消息的差异可能与不同环境中对let 的支持有关。 babel-node 中的var {x} = a = {x: 'cool'}; 没有给出你报告的错误;它再次给了我同样的 ReferenceError。
  • @torazaburo 所以 chrome 的行为是正确的?
  • 我对你所说的工作或不工作以及在什么环境中产生什么错误感到困惑。我建议在您的问题中添加一个小表格。同时,您为什么不直接编写正确的代码,而不用担心不同的环境以不同的方式报告错误?

标签: javascript ecmascript-6 destructuring


【解决方案1】:

在您的代码中,a 未定义。 let a = b = c 没有定义 b。你需要说

let a = {x: 1}, {x} = a;

Firefox 不支持let,所以我想知道您的示例在那里是如何工作的。见https://kangax.github.io/compat-table/es6/

【讨论】:

    猜你喜欢
    • 2020-12-12
    • 2012-09-02
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 2023-02-20
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多