通过递归可以简单实现对象的深度克隆,但是这种方法不管是ES6还是ES5实现,都有同样的缺陷,就是只能实现特定的object的深度复制(比如数组和函数),不能实现包装对象Number,String , Boolean,以及Date对象,RegExp对象的复制。
下面是完美版的深拷贝
参考自:[https://blog.youkuaiyun.com/liwusen/article/details/78759373](()
function istype(obj,type){//判断包装类型的原型
return Object.prototype.toString.call(obj).indexOf 《大厂前端面试题解析+Web核心总结学习笔记+企业项目实战源码+最新高清讲解视频》无偿开源 徽信搜索公众号【编程进阶路】 (type)!=-1
}
const deepClone =(initalObj) =>
{
if (typeof initalObj !== ‘object’) {//如果是基本类型直接返回值
return initalObj
}
if(istype(initalObj,‘String’)||istype(initalObj,‘Number’)||istype(initalObj,‘Boolean’))
return initalObj.valueOf();
if(istype(initalObj,‘Date’))
return new Date(initalObj.valueOf());
if(istype(initalObj,‘RegExp’)){
let pattern