javascript连等赋值与运算符的优先级

从运算符优先级的角度思考(“.”优先级高于“=”),会简单很多,不用这么绕。

零:声明a、b、c、d,均为undefined。
一:a、b、c、d被赋值,均指向对象Object_1,现在为{a:1}。
二:对象Object_1被声明属性x,现在为{a:1, x:undefined},a.x即为Object_1.x。
三:对象Object_1被声明属性y,现在为{a:1, x:undefined, y:undefined},b.y即为Object_1.y。
四:对象Object_1被声明属性z,现在为{a:1, x:undefined, y:undefined, z:undefined},c.z即为Object_1.z。
五:c被赋值,指向对象Object_2,现在为{}。
六:c.z即Object_1.z,被赋值,指向对象Object_2。
七:b被赋值,指向对象Object_2。
八:b.y即Object_1.y,被赋值,指向对象Object_2。
九:a被赋值,指向对象Object_2。
十:a.x即Object_1.x,被赋值,指向对象Object_2。
结:此时a、b、c、d.x、d.y、d.z均指向对象Object_2,现在为{}。d指向Object_1,现在为{a:1, x:{}, y:{}, z:{}}。

参考链接:
纠结的连等赋值
Operator_Precedence
javascript 连等赋值问题