问题(已解决):push pop for循环中push变量,变量随之改变的问题
来源:互联网 发布:纹身图案软件 编辑:程序博客网 时间:2024/06/05 02:14
今天做剑指Offer的时候碰到了这个问题,push一个数组,这个数组也在pop元素,为什么push没有直接把结果放进去,而放的一个指向
var x = [];var y = [1,2,3];for(var i = 0; i < 5; i++) { x.push(y); y.pop();}console.log(x);/*结果是这个[Array(0), Array(0), Array(0), Array(0), Array(0)]*/
var x = [];var y = [1,2,3];for(var i = 0; i < 5; i++) { x.push(y.slice());//新创建的就可以 y.pop();}console.log(x);/*结果是 [Array(3), Array(2), Array(1), Array(0), Array(0)]*/
探究:
1.push 或 pop方法的原因?
2.数组的原因?
(1)和push,pop无关,
//和push无关var x = [];var y = [1,2,3];for(var i = 0; i < 5; i++) { x[i] = y; y.pop();}console.log(x);// [Array(0), Array(0), Array(0), Array(0), Array(0)]//和pop无关var x = [];var y = [1,2,3];for(var i = 0; i < 5; i++) { x.push(y); y.push(i);}console.log(x);//[Array(8), Array(8), Array(8), Array(8), Array(8)]
(2)和数组有关
//如果一方为数字 则正常var x = [];var y = 5;for(var i = 0; i < 5; i++) { x.push(y); y --;}console.log(x);//[5, 4, 3, 2, 1]
//和数组,对象有关var x = [];var y = {};for(var i = 0; i < 5; i++) { x.push(y); y[i] = i;}console.log(x);//[Object, Object, Object, Object, Object] 五个objecet都一样
已解决:这个问题和JS中引用数据类型和基本数据类型的保存有关:
用变量来保存数组、对象,这个变量只是保存的指向他们的地址,而不是这个数组、对象本身,因此本文中,x这个数组中的5个y,全是指针,y指向的东西改变,就会改变。
看下面这个例子:
var x = [];var y = [1,2,3];for(var i = 0; i < 5; i++) { x.push(y); y.pop();}console.log(x);// [Array(0), Array(0), Array(0), Array(0), Array(0)]//下面y指向的数组加1,x随之改变y.push(1);console.log(x); //[Array(1), Array(1), Array(1), Array(1), Array(1)] //取变量point也为这个指针,和y指向同一个变量,point改变,x同样会改变var point = y;point.push(2);console.log(x)//[Array(2), Array(2), Array(2), Array(2), Array(2)]
更多关于基本数据类型和引用数据类型的保存请看 http://www.jianshu.com/p/996671d4dcc4
阅读全文
0 0
- 问题(已解决):push pop for循环中push变量,变量随之改变的问题
- matlab中for循环的循环变量在循环体中不能改变的问题
- iOS 自定义滑动返回和解决连续多次push,pop引起的crash问题
- for循环中声明变量的一个问题回顾
- 微软面试100题-栈的push-pop序列问题
- [实训]解决eclipse中git push一直需要输入远程push地址的问题
- 笔试面试之push,pop问题
- 解决iPhoneX push过程中tabbar上移的问题
- c 的 for 循环中改变变量的值
- [python笔记]for循环中循环变量迭代问题
- 程序中变量自动改变的问题
- 解决git push出现的问题
- 解决 git 无法 push 的问题
- Git push 出现Timeout问题的解决
- 使用 let 解决for 循环闭包 i变量问题
- vb循环中变量赋值的问题
- iOS push的问题
- git push的问题
- [LeetCode]83. Remove Duplicates from Sorted List(删除有序链表的重复元素 )
- Fragment概述
- onResume
- for_each使用方法详解[转]
- 从pcap的DNS流量中分离出隐藏信息
- 问题(已解决):push pop for循环中push变量,变量随之改变的问题
- 分布式锁的几种实现方式~
- 语法分析-1
- mysql grant 用户权限总结
- XML总结(二)
- Android常用控件-02
- OSX shell 添加sublime text 启动命令
- Elasticsearch 的 Shard 和 Segment
- 四、1、函数参数是按值传递还是按引用传递