js连等赋值的坑
首先请看以下代码:
-
var foo={n:1};
-
var bar=foo;//bar={n:1}
-
foo.x=foo={n:2};//foo.x:undefined;
-
//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}}
如下图所示
总结:最好避免这种诡异操作,避开各种诡异行为。