js中變數的連續賦值

來源:互聯網
上載者:User

標籤:運算   fine   一個   pre   經典   執行   添加   通過   nbsp   

下面就是這個經典案例:

var a = {n: 1};var b = a;a.x = a = {n: 2};
console.log(a);
console.log(b);console.log(a.x);console.log(b.x); 

 

  我們先來看一下普通連續賦值,即:變數賦值的類型是資料類型值

    var a=3;    var b=a=5;    console.log(a);    console.log(b);

  一般來說,等號賦值的方向是從右至左,那麼上面的代碼等同於下面這段代碼,那麼我們就用下面這段代碼來解釋上面的代碼:

    var a=3;  //全域變數a被賦值為3    var a=5;  //此時a被重新賦值為5    var b=a;  //將a的值賦給全域變數b
  console.log(a);//a最終的值就是第二次被賦的值:5
  console.log(b);//按照代碼執行順序b的值也是:5

 

   上面的小案例用來拋磚引玉,現在我們來分析這個經典案例:

var a = {n: 1};//a第一次被賦值,是一個參考型別值,請記得變數賦值為參考型別值的時候,通過變數改變這個對象的時候,對象本身也發生了變化var b = a;//b被賦值為a,因此b就是對象{n:1}
a.x = a = {n: 2};
//這個賦值與之前的簡單案例有所不同,a.x指的是給a添加一個x屬性,在js的運算中“.”和"="運算子同時出現,會先執行"."運算
//因此,賦值順序被改變了,是先給a.x賦值,再給a賦值
//就是先執行:a.x={n:2},注意這裡a並未改變,是給a的x屬性賦值為{n:2},a還是{n:1}
//再回到我代碼中的第一句話,這個賦值行為,改變了{n:1}這個對象,即給它增加了名為x的屬性
//再執行a={n:2},這是變數a不再是對象{n:1},而被重新賦值為一個新的對象{n:2};console.log(a);//自然此時a是對象{n:2}
console.log(b);//a的二次賦值,並沒有影響b,b還是對象{n:1},但是由於a在重新賦值之前,給{n:1}這個對象,增加了一個x屬性,因此,這時的b已經有了x屬性console.log(a.x);//{n:2}對象沒有x屬性,所以結果是undefinedconsole.log(b.x);//綜上所述,這個結果是{n:2}   

js中變數的連續賦值

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.