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

鍍金池/ 問答/HTML/ var aa=[1,2,3]; var bb=aa; bb.shift(); a

var aa=[1,2,3]; var bb=aa; bb.shift(); alert(aa);為什么aa是23?

為什么刪除bb數(shù)組的第一個(gè)元素會(huì)影響到aa?
var aa=[1,2,3];
var bb=aa;
bb.shift();
alert(aa);

回答
編輯回答
單眼皮

JS里的6種數(shù)據(jù)類型,除了Object都是基本數(shù)據(jù)類型,Array和Function也屬于Object

Boolean, String, Number, Null, Undefined是字面量類型
字面量類型賦值的時(shí)候,會(huì)拷貝一個(gè)副本

Array, Function, Object是引用類型
引用類型賦值操作就像樓上說的,會(huì)指向同一個(gè)引用,如果你這樣操作

var aa=[1,2,3];
var bb=aa;
aa = [4,5,6]

你會(huì)發(fā)現(xiàn)bb還是[1,2,3]沒有受影響,因?yàn)閍a被指向了另一個(gè)引用

2017年6月28日 09:31
編輯回答
汐顏

你這么賦值屬于拷貝,var bb = aa;你這句話其實(shí)只是將bb指向了數(shù)組的首地址,說白了,aa和bb都是同一個(gè)數(shù)組的不同名字而已,那么你修改bb當(dāng)然aa也會(huì)動(dòng)。
對于這種操作可以這么進(jìn)行,var bb = [...aa];//Es6的擴(kuò)展運(yùn)算符,這樣對b進(jìn)行操作就不會(huì)影響a,代碼也一樣簡化

2018年7月4日 12:19
編輯回答
哚蕾咪

樓上正解,數(shù)組也是對象,aa屬于數(shù)組是引用類型,bb=aa并不是賦值操作,而是二者指向同一個(gè)內(nèi)存地址,因此改變bb的話aa也會(huì)改變。想要拷貝的話用slice,contact,或者循環(huán)一遍都可以。

2018年9月4日 20:55
編輯回答
妖妖

這里的賦值不是拷貝而是引用,即bb是aa的引用。改變bb當(dāng)然會(huì)改變aa,或者你可以用var bb = aa.slice();

2017年2月12日 13:32