Prayer122 2022-01-03 13:51 采纳率: 62.5%
浏览 246
已结题

js中for循环中对象赋值,退出循环后对象的属性值消失

为什么我用数组arr赋值给obj后,访问obj里面什么都没有呢?

img

  • 写回答

3条回答 默认 最新

  • 关注

    var arr=[];要放在循环中
    你题目的解答代码如下:

    var obj = {};
    for (var i = 1; i <= 9; i++) {
        var arr = [];
        for (var j = 1; j <= i; j++) {
            var s = j+"*"+i+"="+(i*j);
            arr.push(s);
            if (j==i) {
                obj[i-1] = arr;
            }
        }
    }
    console.log(obj);
    

    img

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    Prayer122 2022-01-03 14:18

    img

    也是不行的

    回复
    CSDN专家-天际的海浪 回复 Prayer122 2022-01-03 14:27

    要去掉arr.length = 0;

    回复
    CSDN专家-天际的海浪 回复 Prayer122 2022-01-03 14:48

    数组是按引用地址传递的。
    当把一个数组从一个变量传递到另一个变量中时,两个变量都指向这同一个数组的引用地址。
    当改变数组的元素时,实际上是先读取变量中的引用地址找到数组,再改变这个数组的元素。
    这样之后再用另一个变量中的引用地址所找到的也是这同一个数组,会获取到一样的数组内容。
    obj[i-1] = arr;是让 obj[i-1]与arr指向同一个数组的引用地址。
    你对arr.length 设置为 0, obj[i-1]存放的数组 length 也会设置为 0

    1
    回复
查看更多回答(2条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 1月12日
  • 已采纳回答 1月5日
  • 创建了问题 1月3日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部