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

海北高端网站建设请人做外贸网站应注意什么问题

海北高端网站建设,请人做外贸网站应注意什么问题,wordpress添加联系qq,word文档怎么做网站跳转链接深度克隆(Deep Clone)是指复制一个对象或数组及其所有嵌套结构的副本,使得克隆后的对象与原对象完全独立。JavaScript 提供了一些方法实现深度克隆,但每种方法有其优缺点。 1. 常用方法 1.1 使用 JSON.parse 和 JSON.stringify …

深度克隆(Deep Clone)是指复制一个对象或数组及其所有嵌套结构的副本,使得克隆后的对象与原对象完全独立。JavaScript 提供了一些方法实现深度克隆,但每种方法有其优缺点。

1. 常用方法

1.1 使用 JSON.parseJSON.stringify

这种方法最简单,但有局限性。

const obj = { a: 1, b: { c: 2 } };
const clone = JSON.parse(JSON.stringify(obj));console.log(clone); // { a: 1, b: { c: 2 } }
console.log(clone === obj); // false
console.log(clone.b === obj.b); // false
优点
  • 简单易用。
  • 适用于纯 JSON 格式的数据。
缺点
  • 不支持函数、undefinedSymbol、循环引用等。
  • 日期对象会变成字符串,RegExp 对象会丢失。

1.2 使用 structuredClone

structuredClone 是一种内置的深拷贝方法,支持复杂数据结构。

const obj = { a: 1, b: { c: 2 }, d: new Date() };
const clone = structuredClone(obj);console.log(clone); // { a: 1, b: { c: 2 }, d: Date }
console.log(clone === obj); // false
console.log(clone.b === obj.b); // false
优点
  • 支持更多类型(如 DateRegExpMapSet 等)。
  • 处理循环引用。
缺点
  • 不支持旧版本浏览器。
1.3 使用递归实现深度克隆

通过递归遍历对象和数组,手动实现深拷贝。

function deepClone(obj) {if (obj === null || typeof obj !== 'object') {return obj;}if (obj instanceof Date) {return new Date(obj);}if (obj instanceof RegExp) {return new RegExp(obj);}const clone = Array.isArray(obj) ? [] : {};for (const key in obj) {if (obj.hasOwnProperty(key)) {clone[key] = deepClone(obj[key]);}}return clone;
}const obj = { a: 1, b: { c: 2 }, d: new Date() };
const clone = deepClone(obj);console.log(clone); // { a: 1, b: { c: 2 }, d: Date }
console.log(clone === obj); // false
console.log(clone.b === obj.b); // false
优点
  • 完全控制克隆逻辑。
  • 支持特定类型的处理。
缺点
  • 不支持循环引用,需额外处理。

2. 循环引用处理

对于有循环引用的对象,需要使用 WeakMap 来避免递归陷入死循环。

function deepClone (value, cache = new WeakMap ()) {if (typeof value !== "object" || value === null) {return value;}if (cache.has(value)) {return cache.get(value);}const result = Array.isArray(value) ? [] : {};Object.setPrototypeOf(result, Object.getPrototypeOf(value));cache.set(value, result);for (i in value) {if (value.hasOwnProperty(i)) {result[i] = deepClone(value[i], cache);}}return result;
}const obj = { a: 1 };
obj.b = obj; // 循环引用let clone = deepClone(obj);
console.log(clone); // { a: 1, b: [Circular] }const Person = function(name, age) {this.name = name;this.age = age;
}Person.prototype.a = 100;clone = new Person('a', 12)console.log(clone);

3. 方法对比

方法支持类型处理循环引用性能易用性
JSON.parse/stringify仅支持 JSON 格式简单
structuredClone支持大部分类型简单
手动递归可定制支持类型否(需扩展)中等
Lodash支持复杂结构和循环引用简单

推荐

  • 数据结构简单:使用 JSON.parseJSON.stringify
  • 现代浏览器:使用 structuredClone
  • 复杂场景:使用 Lodash 或手动实现带循环引用处理的深拷贝函数。
http://www.yayakq.cn/news/311448/

相关文章:

  • 温州市建设工程质量监督站网站服装网站ui设计
  • 企业网站建设公司选择分析wordpress 菜单路径
  • 太原市做网站公司腾讯云服务器WordPress
  • 婚纱网站手机网站网站建设唐山
  • 网站制作简单模版网站设计命名规范
  • 信息类网站有哪些网站怎么做海外推广
  • 网站按条件显示广告图片专做h5的公司网站
  • 做网站在哪里接活lens wordpress
  • 查看邮箱注册过的网站南昌做企业网站
  • 搭建好网站如何使用影视公司排名
  • 珠海市网络营销协会的官方网站wordpress头像存储
  • 网站排名推广天津企业网站建设开发维护
  • 建设网站选题应遵循的规则做网站域名哪里来
  • 创建网站 优帮云创意聊城做网站的公司
  • 营销网站开发渠道有哪些汕头网站建设网站
  • 网站建设策划书色彩设计方案做网站的镜像是什么意思
  • 山东省职业能力建设处网站wordpress登录密码记录在哪里
  • 网站开发行业竞争网络广告营销策略分析
  • 网站怎么做微博链接中国美食网站模板免费下载
  • 网站反链是什么意思永康市网站建设制作
  • 网站建设属于IT吗网站建设风险管理
  • 龙岩做网站开发哪家厉害wordpress 启动流程
  • 网站迁移 域名设置宁德蕉城城乡建设网站
  • win8网站模版一站式 wordpress
  • 网站建设和优软件商店oppo官方下载
  • o2o网站运维建设方案做网站的上市公司有哪些
  • 网站备案增加域名解析做网站带后台多少钱
  • 设计网站logophp网站建设程序
  • 计算机专业学做网站吗wordpress 正文宽度
  • 绵阳的网站制作公司哪家好杭州seo招聘