Web 前端开发 让前端飞

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

2018-02-03  本文已影响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

上一篇 下一篇

猜你喜欢

热点阅读