关于为什么会有深拷贝和浅拷贝,实际上就是基本类型和引用类型的问题,可以参考我这篇文章:JS进阶】你真的掌握变量和类型了吗
# 浅拷贝
我们用很多简单的方法都能实现浅拷贝:
arr.slice();
arr.concat();
@前端进阶之旅: 代码已经复制到剪贴板
# 深拷贝
我们也能用简单的办法实现深拷贝:
JSON.parse(JSON.stringify(obj))
手动实现:
代码解析后面放出来。
const mapTag = '[object Map]';
const setTag = '[object Set]';
const arrayTag = '[object Array]';
const objectTag = '[object Object]';
const argsTag = '[object Arguments]';
const boolTag = '[object Boolean]';
const dateTag = '[object Date]';
const numberTag = '[object Number]';
const stringTag = '[object String]';
const symbolTag = '[object Symbol]';
const errorTag = '[object Error]';
const regexpTag = '[object RegExp]';
const funcTag = '[object Function]';
const deepTag = [mapTag, setTag, arrayTag, objectTag, argsTag];
function forEach(array, iteratee) {
let index = -1;
const length = array.length;
while (++index < length) {
iteratee(array[index], index);
}
return array;
}
function isObject(target) {
const type = typeof target;
return target !== null && (type === 'object' || type === 'function');
}
function getType(target) {
return Object.prototype.toString.call(target);
}
function getInit(target