小编向大家介绍过了JavaScript中对象是什么(https://www.py.cn/web/js/22873.html)。既然JavaScript中所有的事物都是对象, 那么难免会遇到拷贝的情况,本文小编就向大家介绍JavaScript中对象深拷贝的方法:1. 序列化转成json字符串深拷贝;2. Object.assign()深拷贝;3. 循环递归深拷贝(万能方法)。
1. 序列化转成json字符串深拷贝
let newData = JSON.parse(JSON.stringify(data)); if (newData === data) { console.log(true); } else { console.log(false); } // false
注意:此方法仅在原对象包含可序列化值类型且没有任何循环引用时才有效。
2. Object.assign()深拷贝
var obj3 = {}; 将obj合并到obj3上 Object.assign(obj3, obj); console.log(obj3);// {name: "小甜甜", age: 24, say: ƒ} // 修改obj3的值原对象也不会发生改变 obj3.age = 66; console.log(obj); // {name: "小甜甜", age: 24, say: ƒ} console.log(obj3); // {name: "小甜甜", age: 66, say: ƒ}
注意:要拷贝的对象source里面的属性不是基础类型也是对象,或者属性含有对象数组,那这种方式的拷贝就不会把source对象里面的对象或者数组对象进行深拷贝。
3. 循环递归深拷贝(万能方法)
var arr = [1,2,3,4,5] var arr2 = copyArr(arr) function copyArr(arr) { let res = [] for (let i = 0; i < arr.length; i++) { res.push(arr[i]) } return res }
以上就是js对象深拷贝的三种方法,使用循环递归的方法进行深拷贝是最优的一种方法,比较推荐哦~更多js学习推荐:js教程。