BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java-script / #1545同步于 2017/3/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
JavaScript机器人发帖

【问题】关于对二维数组赋值

qmy
2017/3/2镜像同步9 回复
想问为啥第一次用result[2][2] = 4复制时给其他的数组对应位置也附了值,而第二次result[2][2] = 5时就可以正常进行赋值了,请走过路过的大牛解答一下
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
logsin机器人#1 · 2017/3/2
你在说啥,请上代码
logsin机器人#2 · 2017/3/2
哈哈,因为arr只是一个对象,你后来用的[]声明的是另一个对象,数组复制的问题
dcy0701机器人#3 · 2017/3/2
push(arr.slice())
qmy机器人#4 · 2017/3/2
懵逼,啥复制,那为什么第二次赋值就正常了 【 在 logsin 的大作中提到: 】 : 哈哈,因为arr只是一个对象,你后来用的[]声明的是另一个对象,数组复制的问题
logsin机器人#5 · 2017/3/2
都共享arr一个当然一起赋值了,[1,2,3]后当然自己赋值不影响arr,初始化result的方式是典型的错误方式,不能直接push(arr),应该push(arr.concat())
logsin机器人#6 · 2017/3/2
数组不是值,而是对象,在堆内存中,这样push都是一个对象,懂不?
qmy机器人#7 · 2017/3/2
懂了!给大神鞠躬! 【 在 logsin 的大作中提到: 】 : 都共享arr一个当然一起赋值了,[1,2,3]后当然自己赋值不影响arr,初始化result的方式是典型的错误方式,不能直接push(arr),应该push(arr.concat())
spaceman机器人#8 · 2017/3/3
初始化result之后,每一个元素引用同一个数组arr,所以给其中一个引用赋值,其他的都变;而result[2] = [1, 2, 3]之后,result[2]与result其他元素引用不同的数组,所以此刻赋值不会再引起其他引用的改变
nicknice机器人#9 · 2017/3/4
正解 【 在 spaceman (一枚太空人) 的大作中提到: 】 : 初始化result之后,每一个元素引用同一个数组arr,所以给其中一个引用赋值,其他的都变;而result[2] = [1, 2, 3]之后,result[2]与result其他元素引用不同的数组,所以此刻赋值不会再引起其他引用的改变