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

网站标题怎么做链接云服务器建设网站教程

网站标题怎么做链接,云服务器建设网站教程,设计工作室发展前景,网站建设费用的会计深拷贝和浅拷贝一、引用类型的特性二、浅拷贝1.Object.assign() 实现浅拷贝2. 展开运算符实现浅拷贝3.使用Array.slice() 实现浅拷贝4.使用Array.from() 实现浅拷贝三、深拷贝1.JSON 序列化/反序列化实现深拷贝2. 手动递归实现深拷贝3.使用第三方库实现深拷贝一、引用类型的特性…

深拷贝和浅拷贝

  • 一、引用类型的特性
  • 二、浅拷贝
    • 1.Object.assign() 实现浅拷贝
    • 2. 展开运算符实现浅拷贝
    • 3.使用Array.slice() 实现浅拷贝
    • 4.使用Array.from() 实现浅拷贝
  • 三、深拷贝
    • 1.JSON 序列化/反序列化实现深拷贝
    • 2. 手动递归实现深拷贝
    • 3.使用第三方库实现深拷贝

一、引用类型的特性

js有基本类型的引用类型,区别:

  • 基本类型(如 number、string、boolean):按值存储和传递,保存在栈内存中
  • 引用类型(如 object、array、function):按引用存储和传递
    • 引用类型数据保存在堆内存中,
    • 引用数据类型的变量是一个指向堆内存中实际对象的引用,存在栈中
        let original = {name: "Alice",info: { age: 25 }};// 浅拷贝let shallowCopy = Object.assign({}, original);shallowCopy.info.age = 30;console.log(original.info.age); // 输出 30,因为 info 对象是共享的// 深拷贝let deepCopy = JSON.parse(JSON.stringify(original));deepCopy.info.age = 40;console.log(original.info.age); // 输出 25,原始对象未受影响

二、浅拷贝

  • 浅拷贝创建一个新对象,但是只复制原始对象第一层属性的值
  • 如果属性是基本类型,则复制其值
  • 如果属性是引用类型,则复制其引用(地址)

1.Object.assign() 实现浅拷贝

const original = { name: "John", details: { age: 30 } };
const shallowCopy = Object.assign({}, original);shallowCopy.name = "Jane"; // 不影响原对象
shallowCopy.details.age = 25; // 影响原对象!console.log(original.name); // 输出: "John"
console.log(original.details.age); // 输出: 25

2. 展开运算符实现浅拷贝

const original = { name: "John", details: { age: 30 } };
const shallowCopy = { ...original };// 行为与 Object.assign() 相同

3.使用Array.slice() 实现浅拷贝

const originalArray = [1, 2, { value: 3 }];
const slicedArray = originalArray.slice();

4.使用Array.from() 实现浅拷贝

const fromArray = Array.from(originalArray);

三、深拷贝

  • 深拷贝开辟一个新的栈,两个对象属性完全相同,但是对应两个不同的地址,
  • 修改一个对象的属性,不会改变另一个对象的属性

1.JSON 序列化/反序列化实现深拷贝

  • 简单但是有限制的方法
  • 不能复制函数、undefined、Symbol、BigInt
  • 不支持循环引用的对象
let obj = { a: 1, b: { c: 2 } };
let deepCopy = JSON.parse(JSON.stringify(obj));

2. 手动递归实现深拷贝

  • 手动递归复制对象及其属性
  • 直到所有属性都是基本数据类型为止
function deepClone(obj) {
//基本类型直接返回if (typeof obj !== 'object' || obj === null) {return obj;}const newObj = Array.isArray(obj) ? [] : {};for (let key in obj) {if (obj.hasOwnProperty(key)) {newObj[key] = deepClone(obj[key]);}}return newObj;
}const originalObj = { name: 'John', age: 30, address: { city: 'Beijing', country: 'China' } 
};const newObj = deepClone(originalObj);
newObj.address.city = 'Guangzhou';
console.log('originalObj:',originalObj); 
console.log('newObj:',newObj);

3.使用第三方库实现深拷贝

  • 如Loadsh、jQuery等
  • 会增加项目的依赖和代码体积
const originalObj = { name: 'John', age: 30, address: { city: 'Beijing', country: 'China' } 
};const newObj = _.cloneDeep(originalObj);
newObj.address.city = 'Guangzhou';
console.log(newObj); 
http://www.dtcms.com/a/397922.html

相关文章:

  • 栈-堆理解题(c++)
  • 江西同为科技有限公司亮相2025北京国际两用先进技术装备展览会 —— 致力于电气联接与保护,推动两用技术融合发展
  • 网站首页幻灯片不显示知更鸟wordpress主题
  • React 基础:快速掌握 State、事件和 Hook
  • 烟台网站制作计划wordpress怎么修改logo尺寸
  • Apache Hive 如何在大数据中发挥能量
  • CSS——实现盒子在页面居中
  • RocketMQ相对于RabbitMQ 的优势
  • ELK 企业级日志分析系统(完整版)
  • WaveTerminal+cpolar:提升远程协作效率的开发利器
  • 【记录】Ubuntu系统实现从远程服务器上传下载文件
  • 通过串口控制RDA5807收音模块(stm32+c#上位机)
  • hive表元数据修复脚本
  • React中的Hook
  • React简单例子
  • Playwright MCP 服务器对比高层级的 MCP 服务器解决方案
  • app下载网站模板wordpress将公网ip改为域名
  • 个人做网站如何推广安全优化大师
  • jupyter notebook用简易python代码跑本地模型
  • Android 安卓RIL介绍
  • 开源 java android app 开发(十五)绘图定义控件--仪表盘
  • Android如何自动弹出软键盘?
  • Linux Shell 脚本:从零到进阶的实战笔记
  • MR 一体机市场报告:2031全球规模突破 1.98亿美元,中国 40.8% 市占率成核心增长极
  • 网站管理员权限权重高的网站有哪些
  • 【Spark+Hive+hadoop】基于spark+hadoop基于大数据的全球用水量数据可视化分析系统大数据毕设
  • 07.【Linux系统编程】进程控制(进程创建fork、进程终止exit等、进程等待waitwaitpid、进程替换execl等)
  • 百度Qianfan-VL系列上线:推出3B/8B/70B三款视觉理解模型,覆盖不同算力需求
  • 基于 Python Keras 实现 猫狗图像的精准分类
  • 点云-标注-分类-航线规划软件 (一)点云自动分类