JavaScript 深拷贝 浅拷贝

/**
 * 拷贝对象
 * @param {*} obj - 需要拷贝的数据
 * @param {boolean} deep - 是否进行深拷贝,默认浅拷贝
 * @return {*}
 */
function copy(obj, deep) {
  const type = Object.prototype.toString.call(obj);

  // 只需要深拷贝数组和普通对象
  // 其他类型直接 return 即可
  const deepTypes = ['[object Object]', '[object Array]'];
  if (deepTypes.indexOf(type) === -1) return obj;

  const newObj = type === '[object Object]' ? {} : [];
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      newObj[key] = deep ? copy(obj[key]) : obj[key];
    }
  }
  return newObj;
}

你可能感兴趣的:(前端基础)