让前端飞

js数组赋值与引用的防踩坑指南

2019-01-08  本文已影响4人  杳杳靈鳯

最近在写代码的时候,出现了一个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是赋值,一个是给的地址,一个是给的值。

最后附上 原作者的传送门

上一篇下一篇

猜你喜欢

热点阅读