当前位置: 首页 > news >正文

JS基础之 数据浅拷贝与深拷贝

一、拷贝背景

JS引用数据类型有两类:基本数据类型和引用数据类型;
基本类型:String,Number,Boolean,Null,Undefined,symbol这6种基本数据类型它们是直接按值存放的,所以可以直接访问。
引用类型:Function,Array,Object,当我们需要访问这三种引用类型的值时,首先得从栈中获得该对象的地址指针,然后再从堆内存中取得所需的数据。

// 代码示例:
let obj2 = Obj1; // 此处引用类型直接赋值,obj2的指向堆的地址未改变
obj2.name = "爸爸" // 看似修改的obj2,其实修改的是obj1的属性值
// obj2、obj1的 name值都被修改了。
console.log(obj1.name); // "爸爸"   
console.log(obj2.name); // "爸爸"

为了解决这个问题,所以需要拷贝数据!!!!

二、浅拷贝*3

1、for in 循环拷贝

let newObj = {};
for(let key in oldObj){newObj[key] = oldObj[key];
}
console.log("拷贝对象",newObj);

2、Object.assign();对象合并拷贝

let newObj = Object.assign({},oldObj);

3、解构拷贝(…)

let newObj = { ...oldObj }

三、深拷贝*2

1、JSON拷贝

JSON.parse(JSON.stringify(Obj));

2、递归拷贝

function deepClone(Obj){let newObj = {};for(let key in Obj){newObj[key] = Obj[key];if(newObj[key] instanceof Object){deepClone(newObj[key]);}}return newObj;
}

四、浅、深拷贝区别

浅拷贝只拷贝到数据的第一层,深拷贝拷贝的数整个数据。

扩展:for in 与 for of循环

for key in 主要用于循环对象,不能循环数组
for value of 主要用于循环数组

const person = {name: 'Alice',age: 30
};
for (let key in person) {console.log(key); // 输出: name, ageconsole.log(person[key]); // 输出: Alice, 30
}
const arr = [1, 2, 3];
for (let value of arr) {console.log(value); // 输出: 1, 2, 3
}
http://www.lryc.cn/news/325545.html

相关文章:

  • FFmpeg开发笔记(十四)音频重采样的缓存
  • 详解Python面向对象编程(一)
  • 一文带你完整了解Go语言IO基础库
  • Java基于微信小程序的校园请假系统
  • Expert Prompting-引导LLM成为杰出专家
  • Element-Plus下拉菜单边框去除教程
  • 免费redis可视化工具windows/mac都可以使用,开源免费
  • PHPCMS v9城市分站插件
  • 学习几个地图组件(基于react)
  • 【测试开发学习历程】计算机编程语言
  • 动态内存管理-传值调用错题解析
  • Java特性之设计模式【装饰器模式】
  • Leetcode算法题笔记(2)
  • 二手车交易网站|基于JSP技术+ Mysql+Java+ B/S结构的二手车交易网站设计与实现(可运行源码+数据库+设计文档)
  • lora-scripts 训练IP形象
  • Acwing 503. 借教室
  • 吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.1-3.5
  • Linux设备驱动开发 - 三色LED呼吸灯分析
  • 开发者的瑞士军刀:DevToys
  • 【vue3.0】实现导出的PDF文件内容是红头文件格式
  • 【CSP试题回顾】202012-2-期末预测之最佳阈值(优化)
  • docker学习笔记 三-----docker安装部署
  • FastAPI+React全栈开发02 什么是FARM技术栈
  • C#程序结构详解
  • linux 清理空间
  • C语言:给结构体取别名的4种方法
  • 今天聊聊Docker
  • 【C语言】结构体
  • Git基础(24):分支回退
  • 复试专业前沿问题问答合集1