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

中国各大网站开发语言网站建设摊销年限最新规定

中国各大网站开发语言,网站建设摊销年限最新规定,摄影网课,怎么免费网做百度收录的网站定义 深拷贝#xff08;Deep Copy#xff09;和浅拷贝#xff08;Shallow Copy#xff09;是在编程中常用的两种对象复制方式。 浅拷贝#xff08;Shallow Copy#xff09;#xff1a; 浅拷贝是创建一个新的对象#xff0c;将原始对象的属性值复制到新对象中。如果属… 定义 深拷贝Deep Copy和浅拷贝Shallow Copy是在编程中常用的两种对象复制方式。 浅拷贝Shallow Copy 浅拷贝是创建一个新的对象将原始对象的属性值复制到新对象中。如果属性是基本类型则直接复制其值如果属性是引用类型则复制引用而不是实际对象。浅拷贝只复制对象的一层对于嵌套的对象或数组仅复制它们的引用。因此当原始对象的属性发生变化时浅拷贝的对象也会受到影响。在 JavaScript 中可以使用 Object.assign() 或扩展运算符 … 来实现浅拷贝。 深拷贝Deep Copy 深拷贝是创建一个全新的对象并递归地将原始对象及其所有嵌套的对象完全复制到新对象中。即使原始对象的属性发生变化深拷贝的对象也不会受到影响。深拷贝会遍历整个对象树复制每个对象的值并为其创建新的引用。这样可以确保每个对象都是独立的。在 JavaScript 中可以使用 JSON 序列化和反序列化方法 JSON.parse(JSON.stringify(obj)) 来实现深拷贝。但需要注意该方法有一些限制例如无法复制函数、循环引用等。 使用时需要根据具体的需求来选择使用浅拷贝还是深拷贝。如果只需要复制对象的一层属性并且不关心原始对象的属性改变对复制后的对象是否产生影响可以使用浅拷贝。如果需要确保复制后的对象与原始对象完全独立并且不受原始对象的变化影响应该使用深拷贝。 深拷贝 方法 常见的深拷贝方式包括 手动递归复制通过编写递归函数遍历对象的所有属性并创建新的对象进行复制。对于嵌套的对象或数组递归调用复制函数。这种方法需要自己处理循环引用和特殊数据类型如函数的情况。 function deepCopy(obj) {if (typeof obj ! object || obj null) {return obj;}let copy Array.isArray(obj) ? [] : {};for (let key in obj) {if (Object.prototype.hasOwnProperty.call(obj, key)) {copy[key] deepCopy(obj[key]);}}return copy; }const obj {name: John,age: 25,address: {city: New York,country: USA} };const newObj deepCopy(obj); newObj.address.city Los Angeles;console.log(obj); // { name: John, age: 25, address: { city: New York, country: USA } } console.log(newObj); // { name: John, age: 25, address: { city: Los Angeles, country: USA } }JSON 序列化和反序列化使用 JSON.stringify() 方法将对象转换为字符串再使用 JSON.parse() 方法将字符串转换回对象。这种方法简单易行可以实现深拷贝但无法复制特殊数据类型如函数、正则表达式和循环引用。 const obj {name: John,age: 25,address: {city: New York,country: USA} };const newObj JSON.parse(JSON.stringify(obj)); newObj.address.city Los Angeles;console.log(obj); // { name: John, age: 25, address: { city: New York, country: USA } } console.log(newObj); // { name: John, age: 25, address: { city: Los Angeles, country: USA } }第三方库许多 JavaScript 的第三方库如 lodash、jQuery提供了深拷贝的实现。这些库通常有专门的函数如 _.cloneDeep()可以方便地进行深拷贝操作并且处理了循环引用等特殊情况。 const _ require(lodash);const obj {name: John,age: 25,address: {city: New York,country: USA} };const newObj _.cloneDeep(obj); newObj.address.city Los Angeles;console.log(obj); // { name: John, age: 25, address: { city: New York, country: USA } } console.log(newObj); // { name: John, age: 25, address: { city: Los Angeles, country: USA } }使用场景 对象或数组的修改当需要对一个对象或数组进行修改但又不想影响原始数据时可以使用深拷贝创建一个副本进行修改。 数据传递和处理当需要将对象或数组作为参数传递给函数并且希望在函数内部修改数据时使用深拷贝可以确保原始数据不会被改变。 缓存数据当需要缓存某个对象或数组的状态并在后续操作中恢复到缓存的状态时可以使用深拷贝创建一个备份以便随时恢复。 避免引用共享当多个变量需要引用同一个对象或数组时如果不希望它们共享引用关系可以使用深拷贝创建它们的独立副本。 数据比较和检查当需要比较两个对象或数组是否相等时可以先使用深拷贝创建它们的副本然后进行比较操作以避免引用相等而不实际内容相等的情况。 浅拷贝 方法 常见的浅拷贝方式有以下几种 赋值操作通过将一个对象的引用赋给另一个变量两个变量会引用同一个对象因此它们共享同一份数据。 const originalObj { name: Alice, age: 30 }; const shallowCopyObj originalObj; shallowCopyObj.name Bob;console.log(originalObj); // { name: Bob, age: 30 } console.log(shallowCopyObj); // { name: Bob, age: 30 }Object.assign() 方法该方法可以将一个或多个源对象的属性复制到目标对象中也是浅拷贝即只拷贝对象的第一层属性。 const originalObj { name: Alice, age: 30 }; const shallowCopyObj Object.assign({}, originalObj); shallowCopyObj.name Bob;console.log(originalObj); // { name: Alice, age: 30 } console.log(shallowCopyObj); // { name: Bob, age: 30 }扩展运算符...该运算符可以将一个对象或数组“展开”为多个参数相当于使用 Object.assign() 方法进行拷贝。 const originalArray [1, 2, 3]; const shallowCopyArray [...originalArray]; shallowCopyArray[0] 4;console.log(originalArray); // [1, 2, 3] console.log(shallowCopyArray); // [4, 2, 3]使用场景 简单的数据结构当需要复制简单的数据结构例如基本类型、普通对象或一维数组时可以使用浅拷贝。 不需要修改原始数据当不需要对原始对象或数组进行修改并且只是希望获取一个副本用于读取或传递给其他函数时可以使用浅拷贝。 大规模数据集合当处理大规模的数据集合时为了节省内存和提高性能可以使用浅拷贝来创建一份数据的快照以备后续操作使用。 对象或数组的扁平化当需要将嵌套的对象或多维数组转换为一维结构时可以使用浅拷贝来创建一个扁平化的副本。 实现对象合并当需要将多个对象的属性合并到一个新对象中时可以使用浅拷贝将多个对象合并成一个对象。 区别 相同点 都是用于复制对象或数组的方法可以创建原始数据的副本。在特定情况下都可以用于避免原始数据被修改影响到副本的情况。 不同点 拷贝层级深拷贝会递归复制对象或数组的所有属性或元素包括嵌套的子对象或数组而浅拷贝只复制第一层的属性或元素不会递归复制嵌套结构。引用关系深拷贝创建的是新的独立对象或数组与原始数据没有任何关联而浅拷贝复制的是对象或数组的引用副本与原始数据共享部分引用。数据完整性深拷贝保留原始数据的完整性复制的是完整的数据结构而浅拷贝无法保留原始数据的完整性对于嵌套结构只复制引用。对原始数据的影响深拷贝创建的副本修改不会影响原始数据而浅拷贝创建的副本修改可能会影响原始数据。 import copy# 原始数据 original_list [1, 2, [3, 4]]# 浅拷贝 shallow_copy copy.copy(original_list)# 修改浅拷贝后的数据 shallow_copy[2][0] 5# 打印原始数据和浅拷贝后的数据 print(original_list) # 输出[1, 2, [5, 4]] print(shallow_copy) # 输出[1, 2, [5, 4]]在这个示例中我们使用copy.copy()函数进行浅拷贝。结果表明虽然我们修改了浅拷贝后的数据但原始数据也发生了变化。这是因为浅拷贝只复制了原始列表的引用而没有递归地复制嵌套列表。 import copy# 原始数据 original_list [1, 2, [3, 4]]# 深拷贝 deep_copy copy.deepcopy(original_list)# 修改深拷贝后的数据 deep_copy[2][0] 5# 打印原始数据和深拷贝后的数据 print(original_list) # 输出[1, 2, [3, 4]] print(deep_copy) # 输出[1, 2, [5, 4]]在这个示例中我们使用copy.deepcopy()函数进行深拷贝。结果表明当我们修改深拷贝后的数据时原始数据没有受到影响。这是因为深拷贝递归地复制了所有嵌套的列表创建了原始数据的完整副本。 利弊 深拷贝具有以下利与弊 利: 复制对象的完整数据结构深拷贝会递归复制对象或数组的属性或元素包括嵌套的子对象或数组可以复制对象的完整数据结构保留原始数据的完整性。 独立副本深拷贝会创建新的独立对象或数组而不是共享引用它们与原始数据没有任何关联修改副本不会影响原始数据。 处理循环引用深拷贝可以处理对象内部存在循环引用的情况避免了无限递归或栈溢出等问题。 弊: 复制性能较低由于深拷贝需要递归复制对象或数组的所有属性或元素可能会消耗大量的时间和内存资源对性能造成一定影响。 可能存在对象方法失效问题在深拷贝过程中如果对象或数组的属性或元素中包含函数或方法那么这些函数或方法可能会在复制后失效这可能会导致应用程序出现异常或错误。 浅拷贝具有以下利与弊 利: 简单快速浅拷贝是一种简单且高效的复制方式操作简单快速。 节省内存由于浅拷贝只复制第一层属性或元素而不会递归复制嵌套的子对象或数组因此可以节省内存空间。 保留原始引用关系浅拷贝会保留原始对象或数组的引用关系即拷贝后的对象或数组与原始对象或数组共享相同的引用可以在一定程度上减少数据冗余。 弊: 共享引用关系由于浅拷贝只复制引用而不是创建新的独立对象或数组所以当修改拷贝后的对象或数组时原始对象或数组也会受到影响这可能导致意外的副作用。 不保留原始数据完整性浅拷贝只复制第一层属性或元素对于嵌套的子对象或数组只复制它们的引用而不是创建新的独立对象或数组因此无法保留原始数据的完整性。 无法处理循环引用如果原始对象存在循环引用即对象内部的属性或元素相互引用形成闭环浅拷贝无法处理此类情况可能会导致无限递归或栈溢出等问题。
http://www.pierceye.com/news/449053/

相关文章:

  • 紫川网站建设做画找图网站
  • 郑州快速建站公司合肥学做网站app的学校
  • 除了做视频网站还能做什么网站wordpress手机站如何做
  • 域名注册最好的网站人才网站
  • 网站建设咨询云尚网络中铁十二局出国招工
  • 建站系统推荐做网站在哪里做
  • 贵州建设工程招标协会网站wordpress黑白主题
  • 怎么免费建立自己网站扁平化网站设计
  • 可以自己做漫画的网站北仑营销型网站制作
  • 免费网站统计代码有什么样的网站开发
  • 文山微网站建设湖南人工智能建站系统软件
  • 做网站时候编代码wordpress 技术博客主题
  • 成立网站建设工作领导小组seo网站关键词优化软件
  • 怎么兼职做网站网站建设 运维 管理包括
  • 乐清市住房和城乡建设规划局网站专业做家居的网站
  • 做3d打印网站苏州建设工程人才招聘网信息网站
  • 网站建设丂金手指科杰wordpress中logo大小
  • 微餐饮网站建设被老板抓到用公司产品做自己的网站
  • 软件公司网站模板下载定制搭建网站
  • 网站建设实训报告要求怎么做公司门户网站
  • 深圳规划建设局网站wordpress改变访问目录
  • dw怎么做购物网站o2o平台都有哪些
  • 阿里云备案多个网站吗应用商店下载app软件
  • 响应式网站手机端尺寸网站开发培训心得
  • 徐州手机网站开发公司电话江苏五星建设网站
  • 网站建设全包广做短视频素材哪里找
  • 做网站为什么每年都要续费企业官网建站步骤
  • 培训行业门户网站建设方案专业网站运营制作
  • 百度网站两两学一做心得体会江苏专业网站建设费用
  • 做企业网站的架构图网站上的销售怎么做