目录:

  1. 遇到的问题

  2. 解决方案

  3. 内部原理

  4. 总结

  1. 遇到的问题

  前天在写js时,遇到了一个很奇怪的问题:我有两个数组变量a、b,在经过一些运算后,数组b中有一些值,然后我就把数组b中的数据整体存入到数组a中(a.push(b)),然后就改变了数组b中的值(b.push(55), b.pop(), b[2]=100)。可是我最后从数组a中拿数据时,发现数组a中的数据竟然变了。我当时就纳闷了,我不是已经把数据存进去了么,为什么会变呢?而且如果把数组b清空后就不影响数组a中的值。

  

  2. 解决方案

  这样的情况,解决方案有3种:

  • 将数组b设置为局部变量,当重新使用数组b时,就是重新声明了,与之前的数组b无关;
  • 当然,有时候数组b其他地方可能也需要用到,不能讲数组b设置为局部变量,那么就在数组b的数据存入数组a之前,设置一个局部变量,先把数组b的数据存入到这个局部变量中,局部变量再存入到数组a中,之后数组b再改变时就不影响数组a了
  • 当使用完数组b后,将数组b清空。其实这个跟第二种方法相似,本方法是清除数组b的指针引用,而第二种方法是清除局部变量的指针引用,因为他重新进行了声明。

  以上的三种清空只能根据实际情况进行选择,而不是说哪个简单就选哪个。在我的项目中,就不能使用1和3,只能使用第二种情况。

  3. 内部原理

  js数组其实本质是object,我们使用数组a进行push时,只是push了这个数组b的引用(指针1),其他地方(指针2)改变这个数组b的值时,数组a通过这个指针1获取到的数据也相应的改变了,因为这两个指针访问的是同一个地方。那么解决这个问题的办法就是上面的三种,要么让指针1的指向失效,要么就借助一个局部变量。

  4. 总结

  凡事多想个为什么,多试验一下,就能让我们更明白这个问题。

js的数组问题的更多相关文章

  1. Js删除数组重复元素的多种方法

    js对数组元素去重有很多种处理的方法,本篇文章中为网络资源整理,当然每个方法我都去实现了:写下来的目的是希望自己活学活用,下次遇到问题后方便解决. 第一种 function oSort(arr){ v ...

  2. js去除数组重复项

    /** * js去除数组重复项 */ //方法一.使用正则法 // reg.test(str),匹配得到就返回true,匹配不到返回false var arr = ["345",& ...

  3. js 判断数组包含某值的方法 和 javascript数组扩展indexOf()方法

    var  questionId = []; var anSwerIdValue = []; ////javascript数组扩展indexOf()方法 Array.prototype.indexOf ...

  4. 探讨js字符串数组拼接的性能问题

    这篇文章主要介绍了有关js对字符串数组进行拼接的性能问题,字符串连接一直是js中性能最低的操作之一,应该如何解决呢?请参看本文的介绍 我们知道,在js中,字符串连接是性能最低的操作之一. 例如: 复制 ...

  5. js之数组,对象,类数组对象

    许久不写了,实在是不知道写点什么,正好最近有个同事问了个问题,关于数组,对象和类数组的,仔细说起来都是基础,其实都没什么好讲的,不过看到还是有很多朋友有些迷糊,这里就简单对于定义以及一下相同点,不同点 ...

  6. js对数组的操作函数

    js数组的操作 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多, 自以为js高手的自己居然无从下手, ...

  7. JS 索引数组、关联数组和静态数组、动态数组

    JS 索引数组.关联数组和静态数组.动态数组 数组分类: 1.从数组的下标分为索引数组.关联数组 var ary1 = [1,3,5,8]; //按索引去取数组元素,从0开始(当然某些语言实现从1开始 ...

  8. JS 中数组的排序和去重

    在 PHP 中,数组有很多排序方法,不过其他语言的数组中大概是不会像 JS 的数组一样,包罗万象,啥都通吃的.所以 JS 的数组排序情况就略多一些了. 简单粗暴的排序: 赤果果的sort: var   ...

  9. JS去除数组中重复值的四种方法

    JS去除数组中重复值的四种方法 1 /// <summary>            o[this[i]] = "";  }      }       newArr.p ...

  10. [记录] js判断数组key是否存在

    数组中判断key是否存在 可以通过arrayObject.hasOwnProperty(key)来进行判断数组key是否存在,返回的是boolean值,如果存在就返回true,不存在就返回false ...

随机推荐

  1. goland激活

    http://blog.csdn.net/benben_2015/article/details/78725467 http://blog.csdn.net/john_f_lau/article/de ...

  2. CheckStyle——检查编码格式等是否符合规范

    CheckStyle 一.checkstyle简介 checkstyle是idea中的一个插件,可以很方便的帮我们检查java代码中的格式错误,它能够自动化代码规范检查过程,从而使得开发人员从这项重要 ...

  3. 解决shell脚本参数传递含有空格的问题

    有这样一个py文件,需要传一个字典作为参数: import json import sys def parse_params(data): json_data = json.loads(data[1] ...

  4. TFTP服务器 NFS服务器 smb 、wireshark

    在嵌入式开发过程中有宿主机和目标机的角色之分 宿主机是执行编译.链接嵌入式软件的计算机:目标机是运行嵌入式软件的硬件平台 宿主机一般通过网络.USB.JTAG等方式将软件下载到目标机. 网络下载:tf ...

  5. centos7提示ifconfig command not found解决

    安装centos7时,选择了minimal install的话,没有安装网络组件. yum install net-tools 可以解决问题.

  6. 使用DAO工厂创建实现类对象

    首先分析DAO模式中的每一部分 VO(对象实体):这个类成员变量与数据库中每个字段一一对应,同时提供了相应是set和get方法来设置或取得数值.这个类一般是通过IDE自动生成的 DAO(数据访问接口) ...

  7. (转)extern关键字两种场景的使用

    第一种场景 -- extern extern关键字的作用是声明变量和函数为外部链接,即该变量或函数名在其它文件中可见.用其声明的变量或函数应该在别的文件或同一文件的其它地方定义. 例如语句:exter ...

  8. AlphaControls的使用方法

    AlphaControls的使用方法 转载▼   一.安装方法:  1.解压缩下载的文件,并把它放到你希望的位置,例如 D:\Coder\   2.在Delphi的菜单:Tools->Envir ...

  9. 转:js获取json中key所对应的value值

    <script type="text/javascript"> getJson('age'); function getJson(key){ var jsonObj={ ...

  10. win8.1 设置默认输入法为英文

    win8.1中文版 输入法默认为微软拼音且为中文,此事在使用类似cmd就很不方便了,这里我们只需要将输入法设置为 “允许我为每个应用窗口设置不同的输入法”即可,操作如下: