繁体   English   中英

JavaScript 中的解构赋值顺序是否有保证?

[英]Is the order of destructuring assignment in JavaScript guaranteed?

解构赋值的顺序是否保证从左到右? 例如,在这段代码中:

[ curItem.props, curItem ] = foo(curItem)

其中 foo 返回一个包含两个值的数组。

被分配到curItem.props一定会发生的分配给前curItem

根据我对标准的阅读,确实如此,但这是一个难以阅读的标准。

是的,它由运行时语义保证: IteratorDestructuringAssignmentEvaluation ,特别是生产

AssignmentElementList: AssignmentElementList , AssignmentElisionElement

它首先递归地计算目标表达式左侧的赋值(直到它到达空列表),然后是列表中的最后一个元素(跳过省略元素)。 因此,在您的示例[ curItem.props, curItem ] ,在curItem.props引用之前评估并分配了curItem引用。

然而有趣的是,当使用解构语法时, =运算符左侧的整个表达式是右侧之后计算的这与正常赋值目标的严格从左到右的计算相反。

[ curItem.props ] = foo(curItem)

foo调用之后评估curItem.props引用,而在

curItem.props = foo(curItem)[0]

在 之前被评估。 见第12.15.4 节

如果您相信 Babel 符合规范,您可以随时尝试自己验证

[ curItem.props, curItem ] = foo(curItem);

转译为

"use strict";

var _foo = foo(curItem);

curItem.props = _foo[0];
curItem = _foo[1];
_foo;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM