在某技术平台上看到下面的代码, 心想这些也要放出来? 但是放到浏览器调试窗口运行下, 懵逼了, 跟预想的结果不太一样啊; 上网查了下类似问题, 发现其实是运算符优先级的问题: . 大于 = 的优先级
下面代码计算规则优先计算.
, 再计算=
var d = {};
d.a = d = {"a": 1};
// d.a = 1
第一步: 先运算.运算符, 取d.a
第二步: 再运算=, 由于=运算符是从右到左的执行顺序, 所以 先计算 d = {"a": 1}, 此时d的引用改为指向{"a": 1}, 并非上面第一步中的d
第三步: 将第二步的计算结果给到第一步中的d.a