关于深拷贝:JS-对象如何实现深拷贝

如何实现一个对象的深拷贝?办法1:应用JSON (对象的序列化和反序列化)// 如何实现一个对象的深拷贝?//第一种办法// 对象序列化//创立一个对象var obj = { name:'zhangsan', age:13}//因为是深拷贝 //将obj序列化和反序列化后 赋值给一个obj1 var obj1 = JSON.parse(JSON.stringify(obj));console.log(JSON.stringify(obj), typeof JSON.stringify(obj)); //stringconsole.log(obj1,typeof obj1); // { name: 'zhangsan', age: 13 } objectconsole.log(obj == obj1); //false console.log(obj === obj1); //false//扭转obj1中的name属性obj1.name = 'lisi';//打印输出的obj1的name属性没有扭转 //验证深拷贝只作用于栈区,栈区中变量和变量之间是独立存在的,值得变换不会相互影响console.log(obj,obj1); // { name: 'zhangsan', age: 13 } { name: 'lisi', age: 13 }办法2:第三方库lodash 的cloneDeepLodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。要用lodash标签库 要先导入lodash 在当前目录下 终端中 执行指令 npm i --save lodash //第二种办法// 第三方库lodash的cloneDeep//lodash罕用_来定义var _ = require('lodash');//创立一个对象var obj = { name:'zhangsan', age:18}//应用cloneDeep办法 cloneDeep相当于clone,就是递归拷贝(这个我不是很明确,然而是这么用的)var obj2 = _.cloneDeep(obj);//同样是扭转obj2的name属性obj2.age = 20;//打印输出obj和obj2 发现只有obj2的name属性值扭转了 原理和办法一样console.log(obj); //{ name: 'zhangsan', age: 18 }console.log(obj2); //{ name: 'zhangsan', age: 20 } ...

September 8, 2021 · 1 min · jiezi