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

校园二手书交易网站开发整合营销传播工具有哪些

校园二手书交易网站开发,整合营销传播工具有哪些,淘客推广个人网站怎么做,深圳平湖网站建设公司JavaScript 对象复制:浅拷贝与深拷贝使用说明 在 JavaScript 中,对象复制分为 浅拷贝 和 深拷贝,两者的核心区别在于是否递归复制嵌套的引用类型属性。以下是详细说明和示例: 一、浅拷贝(Shallow Copy) 特…

JavaScript 对象复制:浅拷贝与深拷贝使用说明

在 JavaScript 中,对象复制分为 浅拷贝 和 深拷贝,两者的核心区别在于是否递归复制嵌套的引用类型属性。以下是详细说明和示例:


一、浅拷贝(Shallow Copy)

特点:仅复制对象的第一层属性,若属性是引用类型(如对象、数组),则拷贝的是引用地址。修改嵌套的引用属性会影响原对象。

常用方法:
  1. Object.assign()

    javascript

    const obj = { a: 1, b: { c: 2 } };
    const shallowCopy = Object.assign({}, obj);
    shallowCopy.b.c = 99; // 原对象的 obj.b.c 也会变为 9
    或者
    const shallowCopy = {};
    Object.assign(shallowCopy, obj);也可以复制 reactive 或 ref 创建的响应式对象
    const refObj = ref({});
    Object.assign(refObj.value, proxyObj);
    
  2. 展开运算符 ...

    javascript

    const obj = { a: 1, b: { c: 2 } };
    const shallowCopy = { ...obj };
  3. 数组浅拷贝

    javascript

    const arr = [1, 2, { d: 3 }];
    const newArr = arr.slice(); // 或 [...arr], Array.from(arr)
适用场景:
  • 对象属性无嵌套引用类型。

  • 需要快速复制且性能敏感的场景。


二、深拷贝(Deep Copy)

特点:完全复制对象及其所有嵌套属性,新旧对象完全独立,互不影响。

常用方法:
  1. JSON.parse(JSON.stringify())

    javascript

    const obj = { a: 1, b: { c: 2 }, d: new Date() };
    const deepCopy = JSON.parse(JSON.stringify(obj));如果是 reactive 或 ref 创建的响应式对象,先通过 toRaw 转为 普通对象,再进行拷贝。
    例如:
    const deepCopy = JSON.parse(JSON.stringify(toRaw(proxyObj))); // deepCopy 为普通对象
    const deepCopy = reactive(JSON.parse(JSON.stringify(toRaw(proxyObj)))); // deepCopy 为 reactive 响应式对象 Proxy(Object)
    const deepCopy = ref(JSON.parse(JSON.stringify(toRaw(proxyObj)))); // deepCopy 为ref响应式对象 RefImpl
    

    局限性

    • 忽略 undefined、函数、Symbol。

    • 破坏特殊对象(如 Date 转为字符串,RegExp 转为空对象)。

    • 无法处理循环引用。

  2. structuredClone()(现代浏览器/Node.js 17+)

    javascript

    const obj = { a: 1, b: { c: 2 } };
    const deepCopy = structuredClone(obj); // 支持更多类型,如 Date、Set、Map如果是 reactive 或 ref 创建的响应式对象,先通过 toRaw 转为 普通对象,再进行拷贝。
    例如:
    const deepCopy = structuredClone(toRaw(proxyObj)); // deepCopy 为普通对象
    const deepCopy = reactive(structuredClone(toRaw(proxyObj))); // deepCopy 为 reactive 响应式对象 Proxy(Object)
    const deepCopy = ref(structuredClone(toRaw(proxyObj))); // deepCopy 为ref响应式对象 RefImpl
    
  3. Lodash 的 cloneDeep()

    javascript

    import { cloneDeep } from 'lodash';
    const obj = { a: 1, b: { c: 2 } };
    const deepCopy = cloneDeep(obj); // 处理复杂对象(函数、循环引用等)
  4. 手动递归实现

    javascript

    function deepClone(source, map = new WeakMap()) {if (source === null || typeof source !== 'object') return source;if (map.has(source)) return map.get(source); // 解决循环引用const target = Array.isArray(source) ? [] : {};map.set(source, target);for (const key in source) {if (source.hasOwnProperty(key)) {target[key] = deepClone(source[key], map);}}return target;
    }
适用场景:
  • 对象包含多层嵌套引用。

  • 需要完全独立副本(如状态管理、撤销操作)。


三、如何选择?

方法类型优点缺点
Object.assign浅拷贝简单快速无法处理嵌套引用
JSON 序列化深拷贝原生支持丢失特殊类型,无法处理循环引用
structuredClone深拷贝支持更多类型兼容性要求(IE 不支持)
Lodash cloneDeep深拷贝功能全面需引入第三方库

四、注意事项

  1. 循环引用:手动实现或第三方库需处理对象间的循环引用。

  2. 特殊类型:根据数据类型选择方法(如 structuredClone 支持 Date、Map 等)。

  3. 性能:深拷贝对大型对象有较高开销,优先考虑浅拷贝。


总结

  • 浅拷贝:用 Object.assign 或 ...,适合简单对象。

  • 深拷贝:优先使用 structuredClone 或 Lodash,复杂场景手动实现需谨慎。

通过合理选择拷贝方式,可避免数据意外修改,提升代码健壮性。

http://www.dtcms.com/wzjs/497111.html

相关文章:

  • 电信宽带做网站服务器吗企业网站有什么
  • 甘肃省第八建设集团公司网站批量关键词排名查询工具
  • 旅游网站首页制作品牌传播策略
  • 实体行业做分销网站有什么好处网络营销教案ppt
  • 做网站niche西安seo网站管理
  • 专业做二手房的网站有哪些今天时政新闻热点是什么
  • 网站流量导入是什么意思seo怎么做优化工作
  • 活动网站建设专业网站建设公司
  • 小型视频网站建设如何推广平台
  • 陕西省住房和城乡建设厅官方网站在线智能识图
  • 如何赌博网站做代理百度网盘网页版
  • 南昌专业网站优化推广百度法务部联系方式
  • 网站建设经费保障属于b2b的网站有哪些
  • 网站域名备案 更改吗seo是什么
  • 集团网站建设特点 互联网课堂祁阳seo
  • 免费做章子的网站北京seo公司助力网络营销
  • 做h5找图网站大数据培训包就业靠谱吗
  • 快速做自适应网站最佳的资源搜索引擎
  • 建零售网站还是聚名网域名注册
  • 做衣服接订单的网站片多多可以免费看电视剧吗
  • 群晖套件做网站龙岗网站制作
  • 玛伊网站做兼职加入要多少钱seo手机关键词排行推广
  • 深圳专业网站排名公司我想做app推广代理
  • 济南哪个公司做网站好seo高端培训
  • 西安网站制作西安搜推宝网络中国新闻网发稿
  • 计算机学习网站网络营销的特点不包括
  • 工信部备案信息查询系统培训机构优化
  • 猪价格今日猪价格全国走势天津网站seo设计
  • 如何在网站插做视频百度竞价推广常用到的工具
  • 做销售网站要多少钱营销咨询服务