欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

深/浅拷贝的异同,实现方式

程序员文章站 2022-04-27 08:50:09
...

深浅拷贝的异同

js 深拷贝 vs 浅拷贝
js的深拷贝和浅拷贝
深/浅拷贝的异同,实现方式

浅拷贝方法

  • 直接对象复制
  • Object.assign
// 浅拷贝
function shallowClone(src){
	var dst = {};
	for(var prop in src){
		if(src.hasOwnProperty(prop)){
			dst[prop] = src[prop]
		}
	}
	return dst;
}

深拷贝方法

  • Json.stringfy转为字符串,再Json.parse转回对象(坏处:它会抛弃对象的constructor。也就是深拷贝之后,不管这个对象原来的构造函数是什么,在深拷贝之后都会变成Object。所以只适合 Number, String, Boolean, Array 的扁平对象)
  • 深度递归遍历
// 深拷贝,利用递归
function deepClone(obj) {
  let objClone = Array.isArray(obj) ? [] : {};
  if (obj && typeof obj === "object") {
    for (key in obj) {
      if (obj.hasOwnProperty(key)) {
        //判断ojb子元素是否为对象,如果是,递归复制
        if (obj[key] && typeof obj[key] === "object") {
          objClone[key] = deepClone(obj[key]);
        } else {
          //如果不是,简单复制
          objClone[key] = obj[key];
        }
      }
    }
  }
  return objClone;
}