代码之家  ›  专栏  ›  技术社区  ›  user578895

Babel的ES6对象销毁实现正确吗?

  •  8
  • user578895  · 技术社区  · 9 年前

    所以基本描述很好, {a, b} = obj 转换文件到 a = obj.a; b = obj.b .

    我的问题是关于一个奇怪的语法,我无意中碰到了这个语法,我想知道是否有人能告诉我这个规范,因为我找不到它:

    ({a, b} = obj).c
    

    这就是两个 a , b 分配,然后返回 obj.c 。对于字节流解码器来说,它实际上非常有用,我可以这样写:

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

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

    2 回复  |  直到 9 年前
        1
  •  2
  •   zerkms    9 年前

    Destructuring Assignment中没有什么特殊之处:它与任何其他Assignment一起计算 = 操作人员

    所以它又回来了 rval .

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

    一些细节:

    6 [ 1 ] :

    允许 status 是执行的结果 DestructuringAssignmentEvaluation 属于 assignmentPattern 使用 右心室 作为论据。

    在这个项目之后,作业评估会照常进行,如 a = b = 42; 案例

    参考文献:

        2
  •  1
  •   Felix Kling    9 年前

    是的,它预计会这样工作(详见@zerkms的答案)。您在任何地方都没有看到语法,这是因为在赋值表达式的结果上访问属性不是很好的做法,因为这会使代码非常不可读。无论是赋值给普通变量还是析构函数表达式,在这里都没有太大的区别。

    然而,您可以很容易地将代码转换为合理的析构函数赋值:

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

    或者更接近于原始代码:

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