Babel对ES6对象解构的实现是否正确?

时间:2015-09-03 06:59:49

标签: javascript ecmascript-6 destructuring

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

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

({a, b} = obj).c

这会执行两项ab分配,然后返回obj.c。对于字节流解码器来说,它实际上非常有用,我可以写:

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

我的问题是我没有在任何地方看到过这种语法,也不想依赖于错误实现或提案阶段的内容。

2 个答案:

答案 0 :(得分:3)

解构分配没有什么特别之处:它被评估为与=运营商的任何其他分配。

所以它返回rval

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

一些细节:

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

  

status成为使用DestructuringAssignmentEvaluation作为参数执行assignmentPattern rval的结果。

在此项目之后,分配评估通常会发生,就像a = b = 42;案例一样。

参考文献:

答案 1 :(得分:1)

是的,预计会像这样工作(有关详细信息,请参阅@zerkms的回答)。您没有在任何地方看到语法是因为在赋值表达式的结果上访问属性并不是一个好的做法,因为它使代码非常难以理解。无论是指定正常变量还是解构表达式,都没有太大区别。

但是,您可以非常轻松地将代码转换为合理的解构分配:

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

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

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