思路:深拷贝一个对象(数组),就是要深拷贝对象(数组)中的每一个元素,很显然应当用递归实现。
- 递归退出条件:当传入的变量是基本类型,或为null时,直接返回变量本身。
- 递推工作:深拷贝每一个属性,注意用hasOwnProperty保证只拷贝自身的属性,不拷贝继承到的属性。
代码:
function deepClone(obj){ //不是引用类型或为null时退出递归 if(typeof obj !== "object" || obj == null){ return obj; } //初始化新变量 let copy; if(obj instanceof Array){ copy = []; }else{ copy = {}; } //深拷贝每一个元素 for(let key in obj){ if(obj.hasOwnProperty(key)){ copy[key] = deepClone(obj[key]); } } return copy; }