js中的数组 两个数组值相同时 一个数组改变 另一个数组跟着改变原因

演示代码

 deleteTimes: function () {
                //初始化数组arr1
                let arr1=[1,2,3,4]
                //使arr2的值与arr1相等
                let arr2 = arr1;
                //改变arr1的值
                arr2.splice(0, 1);
                //观察两个数组
                console.log(arr1);
                console.log(arr2)
            },

查看浏览器控制台 发现两个数组都发生改变 

 

如果对基本数据类型进行试验 发现两个变量并不会同时改变;

原因

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

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

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

猜你喜欢

转载自blog.csdn.net/u013675978/article/details/83744847