在JS中,變量是值傳遞,而數組是引用傳遞。
舉例如下:
//變量的賦值傳遞
var a = 2; //變量
var b = a;
var b = a;
a = 3;
alert(b); //結果b=2
alert(b); //結果b=2
//數組的賦值傳遞
var a = [1,2,3]; //數組
var b = a;
b [0] = 5;
alert(a); //結果a=[5,2,3]
var b = a;
b [0] = 5;
alert(a); //結果a=[5,2,3]
以上是比較常見的簡單JS語法,但在面試時可能會遇到一些更加細膩並且容易出錯的問題。
舉例如下:
var a=[1,2,3]; //數組
var b=a;
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]