扫码关注官方订阅号
直接上代码:
test test
我测试的结果:
有2个不明白的地方:1.箭头指的地方为什么没有显示出5?2.从头到尾没有弹出arr2,为什么arr2会随着arr1的变化而变化?
解决方案?如果我只是想在操作arr1的时候,不影响arr2,有没有什么办法?
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
console.log(arr1); //line 1 arr2.push(arr1); //line 2 console.log(arr2); //line 3 console.log(arr2[0]); //line 4 arr1.pop(); //line5 console.log(arr1); //line 6 console.log(arr2[0]); //line 7
回答1.箭头指的地方为什么没有显示出5?执行line 3的时候,控制台打出 [Array[5]] 是正确的,但是当你点击之前的小箭头展开[]中具体内容的时候,所有语句都执行完,arr1的最后一个元素被你pop()了所以此时只有4个items
2.从头到尾没有弹出arr2,为什么arr2会随着arr1的变化而变化?因为arr2[0]内存指向的就是arr1,所以arr1变了,arr2[0]也会跟着变
解决方案?使用克隆大法,把arr1克隆一份再赋值给arr2[0]
纯粹是控制台在接受console.log时,仍然是js执行环境,所以对引用类型的对象不具备时效性。如果你把第一个console换成console.log(arr1.join(''));,那么12345就都显示出来了。
console.log
js
console
console.log(arr1.join(''));
12345
还是因为array是引用类型的缘故,想解决好办,把arr2.push(arr1);改成arr2.push([].concat(arr1));
array
arr2.push(arr1);
arr2.push([].concat(arr1));
其实通篇都是在考你对象的引用类型带来的副作用,多努力哦,祝你成功!
1.箭头指的地方为什么没有显示出5?
是因为 arr2.push(arr1);是将arr1作为一个整体,追加成了arr2里的一个数组元素,如果不明白可以给arr2设置初始值,可以更明白,例如: var arr2 = new Array(9,10);arr2.push(arr1); console.log(arr2);
2.从头到尾没有弹出arr2,为什么arr2会随着arr1的变化而变化?明白第一个之后,第二个就跟着明白了。
你可以打断点看pop()没走的时候是有5的。2随着1变化,证明push时候存放的是指针。
Array.prototype.push.apply(arr2, arr1); //arr2.push(arr1);
替换下 看看接口。不过2的格式跟之前不同
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
回答
1.箭头指的地方为什么没有显示出5?
执行line 3的时候,控制台打出 [Array[5]] 是正确的,但是当你点击之前的小箭头展开[]中具体内容的时候,所有语句都执行完,arr1的最后一个元素被你pop()了所以此时只有4个items
2.从头到尾没有弹出arr2,为什么arr2会随着arr1的变化而变化?
因为arr2[0]内存指向的就是arr1,所以arr1变了,arr2[0]也会跟着变
解决方案?
使用克隆大法,把arr1克隆一份再赋值给arr2[0]
纯粹是控制台在接受
console.log时,仍然是js执行环境,所以对引用类型的对象不具备时效性。如果你把第一个console换成console.log(arr1.join(''));,那么12345就都显示出来了。还是因为
array是引用类型的缘故,想解决好办,把arr2.push(arr1);改成arr2.push([].concat(arr1));其实通篇都是在考你对象的引用类型带来的副作用,多努力哦,祝你成功!
1.箭头指的地方为什么没有显示出5?
2.从头到尾没有弹出arr2,为什么arr2会随着arr1的变化而变化?
明白第一个之后,第二个就跟着明白了。
你可以打断点看pop()没走的时候是有5的。2随着1变化,证明push时候存放的是指针。
替换下 看看接口。不过2的格式跟之前不同