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。
数组的变异方法会直接改变数组的内存地址,就是改变原数组,由于数组是引用数据类型(复杂数据类型),内存地址是一样的,显示的是原来的结果。但包含修改后的结果.(浅拷贝,拷贝栈里面的指针)。
就是放第一次打印的时候,内存地址还没有变,第二次打印的时候已经发生了变化,点开第一次打印,所指向的内存地址已经发生了变化,进而数组项数据也发生了变化。
相关文章
- html,css,js,jquery
- 如何调试Node.js
- js数组
- js处理数组问题,以及数组转化问题
- JS Leetcode 304. 二维区域和检索 - 矩阵不可变,彻底弄懂二维数组前缀和
- JS leetcode 最大连续1的个数 题解分析
- JS leetcode 至少是其他数字的两倍的最大数 解答思路分析
- JS作用域,作用域,作用链详解
- js数组常用方法,含es5
- js判断数组对象或对象对象数组是否包含元素包含值 并获取下标
- js数组怎么删除某一项
- JS教程之如何在 JavaScript 中添加、更新和删除 JSON 数组 - CRUD
- js中在window.onload中写function函数产生的问题
- 使用webpack+vue.js构建前端工程化
- js检测移动端横竖屏
- 前端学习(三)实训复习一原生JS
- js 简易判断一个数字是否是小数
- [记录] js判断数组key是否存在
- JS数组转字符串(3种方法)
- js检查元素是否包括在数组中
- 用js识别是否360浏览器
- js将类数组转Array数组
- 原生js源码之Array数组map方法
- js 判断是否为空对象、空数组
- JS原生Ajax和jQuery的Ajax与代码示例-ok
- 阿拉伯数字转中文大写数字的JS
- Vue.js 监听属性
- three.js 测试1
- JQuery/JS插件 数组转换为Table
- three.js 添加坐标系