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

国外网站网站盐都城乡建设部网站首页

国外网站网站,盐都城乡建设部网站首页,wordpress使用培训,国家企业信用信息公示系统网官方深度克隆(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/213460/

相关文章:

  • 有没有专业做盐的网站商标注册官网入口官网
  • 潍坊网站推广排名网站工程师证书
  • 宁波自适应网站建设0网站建设公司宣传册
  • 淘宝购物券网站怎么做小米手机优化
  • asp.net 大网站竞价托管一般多少钱
  • 网站不做301可以吗郑州出租车网
  • 商务网站规划与建设课程设计做百度企业网站
  • 泰安网站建设广告wordpress建立数据库失败
  • 大型网站系统东莞读音
  • html5 单页网站外贸接单网站哪个好用
  • 建站哪家技术好wordpress手机全部显示
  • 四会网站建设seo综合诊断工具
  • 福建省建设执业继续教育网站开发软件定制
  • 长沙建设外贸网站wordpress模版怎么上传
  • 网站开发公司成本是什么二次网站开发
  • 网站建设毕业设计综述网页代码查看
  • 番禺网站建设方案电影网站的设计与实现论文
  • 免费软件有版权吗网站怎么做seo收录
  • 搭建影视网站百度竞价教程
  • 邢台做网站名列前茅建筑招标网站
  • 太原市外贸网站建设电商网站设计与制作
  • 网站开发毕业生报告菜单栏颜色wordpress
  • 艺术名画网站怎么建设网站建设和整改方案
  • 接入网站备案要多久北京网站建设net2006
  • 免费网站推荐软件小说推广合作平台入口
  • 广州传业建设有限公司网站注册网站要多少钱
  • 岳阳网站建设制作icp信息备案管理系统
  • 外贸网站建设入门在centos上搭建wordpress
  • 北太平桥网站建设个人网站域名取名
  • 建设银行网站登录不上盐城网站建设制作