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


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

最后附上 原作者的传送门

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 最先接触编程的知识是在大学里面,大学里面学了一些基础的知识,c语言,java语言,单片机的汇编语言等;大学毕...
    oceanfive阅读 3,170评论 0 7
  • Javascript有很多数组的方法,有的人有W3C的API,还可以去MDN上去找,但是我觉得API上说的不全,M...
    顽皮的雪狐七七阅读 4,265评论 0 6
  • 第五章******************************************************...
    fastwe阅读 722评论 0 0
  • 古人说,好人不长命,祸害活千年。 今年, 我深刻的体会到了! 自从周五听说游主任一病不起的噩耗后, 心理就开始害怕...
    回不去的青春1986阅读 222评论 0 0
  • 6月27日 星期三 天气热热热 昨晚上睡觉十点了,小兔子一直配合着我写作业没有一句怨言。...
    小兔麻麻_ace0阅读 119评论 0 0