zl程序教程

您现在的位置是:首页 >  后端

当前栏目

js之数组打印看到长度和实际长度不同(浅拷贝)

JS数组 不同 打印 长度 拷贝 实际 看到
2023-09-27 14:22:48 时间

引用数据类型(复杂数据类型会存在深浅拷贝)

不知道的可以先看看概念----------js之深浅拷贝

最近有个大哥哥突然提出了一个问题,具体问题如下。

var arr = [3, 4];
console.log(arr);
arr.push(5); 
console.log(arr);

这两个打印的结果应该是什么,还联想到了变量提升,不过这和变量提升并没有什么关系,斩钉截铁的说了出来,第一个[3,4],第二个[3,4,5],打印出来的结果,表面上看是没问题的,但是点开却发现了问题。
在这里插入图片描述
点开后:
在这里插入图片描述
发现第一次打印里面也有5这一项,明明在代码执行第一次打印的时候,还没有调用数组的push方法呀,为什么第一次打印也会有push之后的5。

数组的变异方法会直接改变数组的内存地址,就是改变原数组,由于数组是引用数据类型(复杂数据类型),内存地址是一样的,显示的是原来的结果。但包含修改后的结果.(浅拷贝,拷贝栈里面的指针)。

就是放第一次打印的时候,内存地址还没有变,第二次打印的时候已经发生了变化,点开第一次打印,所指向的内存地址已经发生了变化,进而数组项数据也发生了变化。