8

所以基本的结构很好,{a, b} = obj可以转换为a = obj.a; b = obj.b.

我的问题是我不小心遇到了一些奇怪的语法,我想知道是否有人可以指出我的规范,因为我找不到它:

({a, b} = obj).c

这两个ab分配,然后返回obj.c。对于字节流解码器,它实际上对我非常有用,因为我可以写:

let width = ({bytes} = intDecode(bytes)).number;

我的问题是我在任何地方都没有看到这种语法,并且不想依赖于错误实现或处于提案阶段的东西。

4

2 回答 2

3

解构赋值没有什么特别之处:它被评估为任何其他带=运算符的赋值。

所以它返回rval

这意味着您可以依赖您的语法。

一些细节:

解构部分在6[ 1 ]中进行评估:

status是执行DestructuringAssignmentEvaluationusingassignmentPattern作为rval参数的结果。

在这个项目之后,分配评估像往常一样发生,就像在a = b = 42;案例中一样。

参考:

于 2015-09-03T07:57:19.803 回答
1

是的,预计它会像这样工作(有关详细信息,请参阅@zerkms 的答案)。您在任何地方都没有看到该语法是因为访问赋值表达式结果的属性并不是一个很好的做法,因为它使代码非常不可读。无论您分配给普通变量还是解构表达式,在这里都没有太大区别。

但是,您可以很容易地将代码转换为合理的解构赋值:

let {bytes, number:width} = intDecode(bytes);

或者实际上,更接近您的原始代码:

let width;
({bytes, number:width} = intDecode(bytes));
于 2015-09-03T12:31:13.447 回答