最近在寫(xiě)代碼的時(shí)候,出現(xiàn)了一個(gè)bug,具體的情況是這樣的
var a = ["1"];
b = a
for(x in b){
a.push("2")
}
然而運(yùn)行發(fā)現(xiàn),明明push的對(duì)象是a數(shù)組,b數(shù)組的值居然也變了。

我印象中,給字符串賦值的話,b應(yīng)該是不會(huì)變的呀。我又測(cè)試了一下,結(jié)果的確是b沒(méi)有變。

百思不得其解的我,去問(wèn)了下度娘,得到了答復(fù)。
str = arr; //這個(gè)不是賦值,將數(shù)組arr的引用賦給str,所以改變str也會(huì)改變arr (js實(shí)際創(chuàng)建的str是一個(gè)對(duì)象);
正確賦值:
1、str = [].concat(arr);
content用于連接多個(gè)數(shù)組:arr1.concat(arr2,arr3,。。。。)2、str=arr.slice(0);
返回一個(gè)新數(shù)組,從0到最后。
(slice有兩個(gè)參數(shù):xx.slice(start,end),返回?cái)?shù)組xx下標(biāo)從start到end的元素。若未定義end則返回start到結(jié)尾。)
效果展示:

總結(jié):arr = arr是引用,str = str是賦值,一個(gè)是給的地址,一個(gè)是給的值。
最后附上 原作者的傳送門(mén)