实现深浅拷贝
浅拷贝是拷贝一层,深层次的引用类型,则共享内存地址,在JS中存在浅拷贝的现象有:
- Object.assgin
- Array.prototype.slice()
- Array.prototype.concat()
- 使用拓展运算符实现的复制
function shallowClone(obj){ let res for(let key in obj){ if(obj.hasOwnProperty(key)){ res[key]=obj[key] } } return res }
function deepClone(obj) { // 如果传进来的参数不是对象或者为null,则直接返回 if (typeof obj !== 'object' || obj === null) { return obj; } let res; if (Array.isArray(obj)) { res = []; } else { res = {}; } // 遍历对象的每个属性 for (let key in obj) { //检查自有的属性 if (obj.hasOwnProperty(key)) { // 递归调用 deepClone 函数,对属性进行深度克隆 res[key] = deepClone(obj[key]); } } // 返回克隆后的对象 return res; }