深浅拷贝通常是对于引用数据类型进行的(数据类型为:对象(Object)、数组(Array)、函数(Function))
浅拷贝
let obj = {obj: 1, name: 2}
let newObj = obj
随着newObj变化,obj也跟着变频化,这种情况下就需要进行深拷贝,才能保证newObj变化对obj的数值不影响。
深拷贝实现方式
-
JSON.parse(JSON.stringfy(obj))
-
nodejs项目中,有一个loadsh模块,可以利用它提供的方法来实现深度clone
const deepClone = require('loadsh/cloneDeep') -
array.slice(0)方法实现深拷贝
-
array.concat(arr)方法实现深拷贝
-
构造自定义深拷贝函数(使用函数递归实现深拷贝)
function deepClone(obj) { // 判断传入对象是数组还是对象 var result = Array.isArray(obj) ? []: {} for (var key in obj) { // 判断当前key是否存在 if (obj.hasOwnProperty(key)) { // 判断当前key所对应的obj[key]的value值是否还是object类型,如果是,则递归调用deepClone函数且赋值给当前的result[key] if (typeof(obj[key] === 'object' && obj[key] !== null)) { result[key] = deepClone(obj[key]) }else { result[key] = obj[key] } } } return result } -
使用ES6的数组解构实现深拷贝