不要被误导了:JavaScript深拷贝的5种方法

2023-05-27 0 225

注:多于第一类才有那个市场需求,

网路上的即,深复本有六种,这副标题误人!!!

基本概念如是说

深复本:在堆缓存中再次开拓三个存储容量,全然布季夫三个十分相似的第一类;浅复本:无此堆缓存中再次开拓内部空间,只拷贝栈缓存中的提及门牌号。其本质上三个第一类(字符串)仍然对准同几块存储容量

1、可信赖:JSON暴力行为转化成

透过JSON.stringify() 和 JSON.parse() 将第一类转成字符串后在转成第一类。

var obj = {name:6666,a:123} var obj2 = JSON.parse(JSON.stringify(obj

此种形式对大结构紧凑统计数据很有效率,注:值勤为undefined、function、symbol等会在切换操作过程中被忽视。

2、可信赖:借助循环式和递回的形式

function deepClone(obj, newObj) { var newObj = newObj || {}; for (let key in obj) { if (typeof obj[key] == object) { newObj[key] = (obj[key].constructor === Array) ? [] : {} deepClone(obj[key], newObj[key]); }else { newObj[key] = obj[key] } } return newObj; }

特别注意增设临界值在循环式递回中(typeof obj[key] == ‘object’),不然会导致进退两难式。

3、可信赖:lodashC#实现深复本

lodash很热门的C#,提供了 lodash.cloneDeep()实现深复本

4、可信赖:JQuery的extend()函数 (推荐在JQuery项目中使用,其他项目仍然推荐是用递回函数)

var array = [1,2,3,4]; varnewArray = $.extend(true,[],array);

5、不可信赖:Object.assign()复本

当第一类中多于一级属性,没有二级属性的时候,此方式为深复本,但是第一类中有第一类的时候,此方式,在二级属性以后就是浅复本。

6、不可信赖:ES6解构赋

let a = {key1: 13333} let b = {…a} b.key1 = 2444 console.log(a) // {key1:2444}

只能深度复本第一类的第一层,如果第一类中的属性也是第一类的话,没有办法进行深度复本的。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务