javascript - JavaScript 中的解构和初始化

标签 javascript javascript-objects destructuring

JavaScript 中的初始化是如何工作的?我在下面的代码中收到错误,指出在初始化之前无法访问 obj

let a = 7;
let b = 10;

const obj = { a:23, b:35, c:70 }
({a, b} = obj);
console.log(a, b);

最佳答案

这是因为您依赖于自动分号插入,并且在 const obj... 行之后没有添加自动分号。如果没有,该行和下面的行将被视为一个表达式,该表达式确实会在初始化之前尝试访问 obj:

const obj = { a:23, b:35, c:70 }({a, b} = obj);

对于解析器来说,这看起来像一个函数调用。如果您没有尝试访问解析器认为是参数列表的 obj ,那么当它到达调用该对象的点时就会失败,因为该对象不可调用。

您需要一个明确的分号来分隔语句:

let a = 7;
let b = 10;

const obj = { a:23, b:35, c:70 }; // <==== Here
({a, b} = obj);
console.log(a, b);

看看你的代码,你可能只是忘记了这个,因为你包含了其他代码。但如果您要依赖 ASI,请确保在以 ([` 开头的每一行前面加上 ; 以防止该行继续前面的表达式。

关于javascript - JavaScript 中的解构和初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66229052/

相关文章:

javascript - react 测试错误。目标容器不是 DOM 元素

javascript - PHP 可以安全地提取目录内容并使用 JQuery 读取它们吗?

Javascript:从嵌套键值对中读取键/值

typescript - 将参数属性速记与 TypeScript 中的解构相结合

javascript - 在 Javascript 中解构赋值的好处

javascript - 如何使用 Cytoscape.js 使节点的名称与其 ID 不同?

javascript - coinmarketcap api v2 jquery

javascript - 将 div 附加到对象时,会出现 [object, Object],而不是实际的输入

javascript - 为什么直接在 function 上添加方法不能像 function.prototype 那样工作?

c++ - 在 C++ 中解构时如何隐藏现有变量?