JavaScript中两个连续相等的工作原理如何?

时间:2016-09-25 17:57:06

标签: javascript

基本上,代码行curr = curr[ch] = curr[ch] || {}将变量ch设置为对象的键,并将{}设置为对象的值,然后指向其子引用。

但有人可以详细解释它是如何工作的吗?感谢

http://jsbin.com/gokapoc/1/edit?js,console

let root = {};
let curr = root;

let ch = 'a';
curr = curr[ch] = curr[ch] || {};
ch = 'b';
curr = curr[ch] = curr[ch] || {};
ch = 'c';
curr = curr[ch] = curr[ch] || {};

console.log(root);

它将显示结果:

{
  a: {
    b: {
      c: {}
    }
  }
}

1 个答案:

答案 0 :(得分:1)

让我们一起来看看。我添加了括号以使事情更清楚 - 它们不会改变含义。

let root = {};
let curr = root;

直到现在没什么难的

let ch = 'a';
curr = (curr[ch] = (curr[ch] || {})); 

好的,curr[ch]目前是undefined,因为a中的ch没有属性currroot的值)与{}相同的对象。因此,最内部括号的计算结果为curr[ch]

此值已分配给a。显然现在root对象中有一个属性root.a

最后,此对象(curr)被分配给a,因为外括号中的赋值返回指定的值,即属性ch = 'b'; curr = (curr[ch] = (curr[ch] || {})); 处的对象。

curr

基本上和以前一样,重要的是要注意root不是root.a,而是curr指向的同一个对象。最后root.a.b将指向与ch = 'c'; curr = (curr[ch] = (curr[ch] || {})); 相同的对象。

{{1}}

是的,现在应该清楚了。

代码非常紧凑但不是很清晰。