JS數組賦值的引用傳遞

在JS中,變量是值傳遞,而數組是引用傳遞。

舉例如下:
//變量的賦值傳遞
var a = 2;    //變量
var b = a;
a = 3;
alert(b);    //結果b=2

//數組的賦值傳遞
var a = [1,2,3];    //數組
var b = a;
b [0] = 5;
alert(a);     //結果a=[5,2,3]

以上是比較常見的簡單JS語法,但在面試時可能會遇到一些更加細膩並且容易出錯的問題。

舉例如下:

var a=[1,2,3]; //數組
var b=a;
a=[4,5,6]; //改變的是引用
alert(b);       //結果[1,2,3]
應該有很多同學會這樣想:因爲數組是引用類型,應該是傳遞的是引用,所以 b也是[4,5,6],於是錯了 。
正確答案是b=[1,2,3]。這是爲什麼嗎?

首先強調一點概念:
數組名存放的內容是地址在C語言中數組名就是一個地址,指向數組的第一個元素
現在來詳細的解讀上面的程序:
var a= [1,2,3];    //定義一個數組並賦值,此時a 指向[1,2,3]數組對象
     

var b = a;          //因爲a是數組名,表示的是地址。將a的地址付給b,此時b也指向[1,2,3]數組對象
          
a = [4,5,6];       //此時a指向數組對象[4,5,6],改變的是a的指向對象,並沒有改變[1,2,3]數組對象本身
          

看到這裏,之前有疑惑的同學應該豁然開朗了吧。,再補充一題讓大家更充分的理解。

var a = [1,2,3];

var b = a;

a.pop();        //pop()方法 :刪除數組對象的最後一個元素  這裏是直接改變的數組對象[1,2,3]

alert(b);        //結果b=[1,2]



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章