什么是javascript浅拷贝

2025年03月06日 建站教程

什么是浅拷贝?浅拷贝就是创建一个新的对象,来接受你要重新复制或引用的对象值。如果对象属性是基本的数据类型,复制的就是基本类型的值给新对象;但如果属性是引用数据类型,复制的就是内存中的地址,如果其中一个对象改变了这个内存中的地址所指向的对象,肯定会影响到另一个对象。

浅拷贝基本介绍:

方法 使用方式 注意事项
Object.assign() Object.assign(target, …sources)
说明:用于将所有可枚举属性的值从一个或多个源对象分配到目标对象。它将返回目标对象。
1.不会拷贝对象的继承属性;
2.不会拷贝对象的不可枚举的属性;
3.可以拷贝 Symbol 类型的属性。
展开语法 let objClone = { …obj }; 缺陷和Object.assign()差不多,但是如果属性都是基本类型的值,使用扩展运算符进行浅拷贝会更加方便。
Array.prototype.concat()拷贝数组 const new_array = old_array.concat(value1[, value2[, ...[, valueN]]]) 浅拷贝,适用于基本类型值的数组
Array.prototype.slice()拷贝数组 arr.slice([begin[, end]]) 浅拷贝,适用于基本类型值的数组

浅拷贝代码示例:

function shallowClone(target) {
  if (typeof target === 'object' && target !== null) {
    const cloneTarget = Array.isArray(target) ? [] : {};
    for (let prop in target) {
      if (target.hasOwnProperty(prop)) {
        cloneTarget[prop] = target[prop];
      }
    }
    return cloneTarget;
  } else {
      return target;
  }
}

// 测试
const shallowCloneObj = shallowClone(obj)
shallowCloneObj === obj  // false,返回的是一个新对象
shallowCloneObj.arr === obj.arr  // true,对于对象类型只拷贝了引用

本文链接:http://so.lmcjl.com/news/24392/

展开阅读全文
相关内容