1. 程式人生 > >js連等賦值的坑

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}}

如下圖所示

總結:最好避免這種詭異操作,避開各種詭異行為。