美文网首页让前端飞
js数组赋值与引用的防踩坑指南

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

作者: 杳杳靈鳯 | 来源:发表于2019-01-08 17:51 被阅读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是赋值,一个是给的地址,一个是给的值。

    最后附上 原作者的传送门

    相关文章

      网友评论

        本文标题:js数组赋值与引用的防踩坑指南

        本文链接:https://www.haomeiwen.com/subject/ndybrqtx.html