深度克隆对象的方法有哪些?并把你认为最好的写出来。
此题不多说,必须掌握,工作中经常需要用到。
JSON.stringify
很明显可以看到输出的对象中没有say方法和undefined属性,所以JSON.stringify有一定的局限性,但是对于接口交互中还是挺实用的。
let obj = {
name: 'liming',
age: 12,
parents: {
mother: { name: 'zhanglan', age: 34 },
father: { name: 'lifeng', age: 35 }
},
score: [1, 2, 3, 4, 5, 6],
say: function() {
console.log('my name is ' + this.name);
},
null: null,
undefined: undefined
};
console.log(JSON.parse(JSON.stringify(obj)));深度递归
此方法需掌握,递归遍历对象并赋值。
注意点:数组需要特殊处理,不然复制过来就变成了一个类数组格式。
function deepClone(value) {
if (Object.prototype.toString.call(value) === '[object Object]') {
//对象
let returnObj = {};
for (let key in value) {
returnObj[key] = deepClone(value[key]);
}
return returnObj;
} else if (Object.prototype.toString.call(value) === '[object Array]') {
//数组
let returnArr = [];
for (i = 0, len = value.length; i < len; i++) {
returnArr.push(deepClone(value[i]));
}
return returnArr;
}
return value;
}