最近在写代码的时候,出现了一个bug,具体的情况是这样的
var a = ["1"];
b = a
for(x in b){
a.push("2")
}
然而运行发现,明明push的对象是a数组,b数组的值居然也变了。
我印象中,给字符串赋值的话,b应该是不会变的呀。我又测试了一下,结果的确是b没有变。
百思不得其解的我,去问了下度娘,得到了答复。
str = arr; //这个不是赋值,将数组arr的引用赋给str,所以改变str也会改变arr (js实际创建的str是一个对象);
正确赋值:
1、str = [].concat(arr);
content用于连接多个数组:arr1.concat(arr2,arr3,。。。。)2、str=arr.slice(0);
返回一个新数组,从0到最后。
(slice有两个参数:xx.slice(start,end),返回数组xx下标从start到end的元素。若未定义end则返回start到结尾。)
效果展示:
总结:arr = arr
是引用,str = str
是赋值,一个是给的地址,一个是给的值。
最后附上 原作者的传送门
网友评论