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

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

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

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

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

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

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

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

你可能感兴趣的:(#,js,js)