美文网首页Web 前端开发 让前端飞
JS数组存储(两个数组相等,一个改变,另一个跟着改变)

JS数组存储(两个数组相等,一个改变,另一个跟着改变)

作者: 雨未浓 | 来源:发表于2018-02-03 20:28 被阅读175次

昨天遇到一个奇怪的问题,代码原意大致如下:

var arr1 = [1,2,3];
var arr2 = arr1;
arr1.push(123);
console.log(arr2);//[1,2,3,123]

一旦两个数组相等,其中一个改变,另一个会跟着改变。

注释:

数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的
实际的数组元素被存储在堆(heap)内存中;数组引用变量是一个引用类型的变量,被存储在栈(stack)内存中。数组在内存中的存储示意图如图4.2所示:


image.png

参考:http://blog.csdn.net/ysgjiangsu/article/details/50803811

复解:

基本类型:基本的数据类型有:undefined,boolean,number,string,null。 基本类型存放在栈区,访问是按值访问的,就是说你可以操作保存在变量中的实际的值。
引用类型:引用类型指的是对象。可以拥有属性和方法,并且我们可以修改其属性和方法。引用对象存放的方式是:在栈中存放对象变量标示名称和该对象在堆中的存放地址,在堆中存放数据。

对象使用的是引用赋值。当我们把一个对象赋值给一个新的变量时,赋的其实是该对象的在堆中的地址,而不是堆中的数据。也就是两个对象指向的是同一个存储空间,无论哪个对象发生改变,其实都是改变的存储空间的内容,因此,两个对象是联动的。

数组就属于引用类型

参考:https://www.cnblogs.com/telnetzhang/p/5714920.html

相关文章

  • JS数组存储(两个数组相等,一个改变,另一个跟着改变)

    昨天遇到一个奇怪的问题,代码原意大致如下: 一旦两个数组相等,其中一个改变,另一个会跟着改变。 注释: 数组是一种...

  • js 数组

    js 中数组的长度发生改变,数组就真的发生改变,快速清空数组就让数组长度为0js 数组的方法

  • 小练习3

    1.JS数组的方法,哪些会改变自身数组,哪些不会改变自身数组? 改变自身数组 push() 方法可向数组的末尾添加...

  • 数组、对象的各种处理

    一、数组 1、复制 浅copy,两个数组指向同一个地址,一个改变了数组的值,另一个也随之改变。这样的copy并非我...

  • 好玩的JS数组

    好玩的js数组 数组去重 数组是否相等 两个数组的交集 寻找两个数组的不同 在两个数组中的非共公元素 判断两个数组...

  • 前端学习大纲-基础篇

    js基础 数组操作哪些会改变原数组(pop、splice、reverse等等)哪些不会改变原数组(map、redu...

  • JS数组

    JS数组 一、语法 二、伪数组 概念:没有数组共有属性的数组 三、转化 四、合并两个数组或字符串 注:不会改变原数...

  • Array对象常用方法

    不改变原数组: 1、 concat() 连接两个或多个数组 不改变原数组 返回被连接数组的一个副本 2、join(...

  • 0806面试

    数组能否直接赋值为数组可以直接赋值,但应该先初始化为数组赋值以后,这两个数组指向同一个内存地址,一个改变则另一个也...

  • js 赋值的两个数组、对象数据会相互影响的解决方法

    将 a 数组赋值给 b 数组,然后修改 a 数组中的内容,b 数组也会跟着改变。 例如: 原因: a 数组本质是指...

网友评论

    本文标题:JS数组存储(两个数组相等,一个改变,另一个跟着改变)

    本文链接:https://www.haomeiwen.com/subject/sefpzxtx.html