深拷贝、浅拷贝的实现方法
1、json方法
var cloneObj=JSON.parse(JSON.stringify(obj));
不足:1、无法拷贝 对象中的方法属性 2、无法拷贝 对象中值为undefined的属性
2、jquery方法
jQuery.extend(true,{},obj); //true为深拷贝,false为浅拷贝,其实是把第二个对象上面的属性和对象覆盖到第一个对象上面
不足:1、需要引用jQuery库 2、无法拷贝 对象中值为undefined的属性
3、使用递归实现的方式
//使用递归实现深拷贝函数 function deepClone(obj) { var objClone = Array.isArray(obj) ? [] : {} if (obj && typeof obj === 'object') { for (key in obj) { if (obj.hasOwnProperty(key)) { //判断obj的子元素是否为object对象,如果是则就递归拷贝 if (obj[key] && typeof obj[key] === 'object') { objClone[key] = deepClone(obj[key]) } else { //如果不为对象就直接拷贝 objClone[key] = obj[key] } } } } return objClone }
不足:代码比其他两种方式复杂。
4、浅拷贝方法
Object.assign() 这个方法的作用是把对象的枚举元素都复制到第一个参数对象里。
let a = { url: '996' } let b = { name: '阿珍', url: a } let c = Object.assign({}, b) a.url = a.url + '.icu' console.log(c)
// 输出 c={
name: "阿珍",
url: {
url:"996.icu"
}
}