乐趣区

关于深拷贝: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));  //string
console.log(obj1,typeof obj1);   // {name: 'zhangsan', age: 13}    object
console.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 的 cloneDeep

Lodash 是一个一致性、模块化、高性能的 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}

又完事了。。。。应该是有三种办法的,待更新、、、、、、、、

退出移动版