在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/網(wǎng)絡安全  HTML/ 關(guān)于引用對象和數(shù)組

關(guān)于引用對象和數(shù)組

var arr = [1,2,3,4,5];
arr2 = arr;
arr = arr2.concat([6,7,8,9,10]);
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
arr2;
[1, 2, 3, 4, 5]

如上代碼,數(shù)組是引用類型對象,arr2保存的是對arr的引用。
但是為什么對arr進行操作之后,輸出arr2還是arr之前的舊值。

回答
編輯回答
安于心

concat 函數(shù)返回新的引用

2018年9月1日 04:15
編輯回答
不歸路

因為concat不會改變原數(shù)組

2018年6月27日 21:42
編輯回答
別傷我

正如樓上所描述的一樣;

Array.concat()會返回一個新數(shù)組,所以arr已經(jīng)不再與arr2的引用一樣了。

詳細點就是

var arr = [1,2,3,4,5];   //這里開辟了一個堆(heap_1)存儲了[1,2,3,4,5], 并且將指針復制給了arr
arr2 = arr;  //將arr的指針賦值給了arr2,所以arr 和 arr2 指向了同一個堆(heap_1)

arr = arr2.concat([6,7,8,9,10]);  
//Array.concat() 將會開辟另一個堆(heap_2)來存放結(jié)果,并將指針返回, 所以這里 arr 指向的是新的堆(heap_2);
//同時Array.concat()不會修改原來的數(shù)組,所以arr2的指向沒有變,仍然指向(heap_1)
2018年1月31日 22:13
編輯回答
舊言
var arr = [1,2,3,4,5];
arr2 = arr; //此時 arr2 = [1,2,3,4,5]
arr = arr2.concat([6,7,8,9,10]);
//這里concat的不會修改原數(shù)組,而是返回了一個新的數(shù)組,并且把這個新的數(shù)組賦值給arr
//所以 arr2沒變 還是[1,2,3,4,5],而arr則變成了[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2017年4月8日 08:39