js连等赋值的坑

首先请看以下代码:

 

 
  1. var foo={n:1};

  2. var bar=foo;//bar={n:1}

  3. foo.x=foo={n:2};//foo.x:undefined;

  4. //foo:{n:2}

 

 

1.连等是从右向左赋值的

2. ‘.’的优先级高于=;

3.js解析第三行代码时:首先会确定所有指针的位置,foo.x是否是指针,所以先创建指针,所以为:foo{n:1,x:null}

其次,看foo是否为指针,foo指向{n:1,x:undefined};

最后从右向左依次赋值,

即:foo指向了新的对象{n:2}

而foo.x为指向原来对象的x指针,即原来对象被赋值为:{n:1,x:{n:2}}

如下图所示

 

js连等赋值的坑

总结:最好避免这种诡异操作,避开各种诡异行为。