美文网首页
关于js中深度克隆(面试被问了三次)

关于js中深度克隆(面试被问了三次)

作者: 随感_ | 来源:发表于2018-09-10 16:09 被阅读0次

js中的数据类型分为两大类:原始类型和对象类型;
原始类型:数值,字符串,布尔值,null,undefined
对象类型:函数 数组
这两种类型在复制克隆的时候有很大的区别,原始类型存储的是对象的实际数据,而对象类型存储的是对象的引用地址
克隆的概念:
浅度克隆:原始类型为值传递,对象类型仍为引用传递。
深度克隆:所有元素或者属性均为完全复制,与原对象完全脱离,也就是说对于所有新对象的修改均不会反映到原对象中。
深克隆的实现
为了保证对象的所有属性都被复制到,我们必须知道如果 for 循环以后,得到的元素仍是object或者array 那么需要再次循环,直到元素是原始类型或者函数为止,为了得到元素的类型,我们定义一个通用函数,用来返回传入对象的类型。

//返回传递给他的任意对象的类
function isClass(o){
if (o === null)return 'null';
if(o===undefined)return 'undefined';
return Object.prototype.toString.call(o).slice(8,-1);//能直接返回对象的类属性
}

function deepClone(obj){
var result,oClass= isClass(obj);//确定result的类型
if (oClass==='object'){
result = {};
}else if(oClass ==="Array"){
result = [];
}else{
return obj;
}
for(key in obj){
var copy = obj[key];
if(isClass(copy)=="object"){
result[key] = arguments.callee(copy);
}else{
result[key]=obj[key];
}
}
return result;
}

相关文章

  • 关于js中深度克隆(面试被问了三次)

    js中的数据类型分为两大类:原始类型和对象类型;原始类型:数值,字符串,布尔值,null,undefined对象类...

  • js克隆

    实现 js 深度克隆 执行结果如下:

  • js深度克隆

  • js深度克隆

    在JAVAScript中数据类型分为两种,一种是原始数据类型,另外一种就是引用数据类型。 数据类型 原始数据类型:...

  • JS 深度克隆

    想要克隆一个对象或数组,如果只是普通的赋值,那么只是复制了浅层,深层的引用值其实指向的是同一块内存。 JSON克隆...

  • js对象深度克隆

    通用克隆方法 第一种方法简单粗暴,先将对象序列化再解析回来,不过要注意对象中如果有函数function则不能正确复...

  • JS实现深度克隆

    一、概念 深度克隆:深度克隆的新对象可以完全脱离原对象,我们对新对象的修改不会反映到原对象中 二、知识点储备: 1...

  • JS深度克隆实现

  • js实现深度克隆

    方法一 硬刚法(迭代法,适用于所有) 方法二 利用JSON.stringify 将js对象序列化(JSON字符串)...

  • js 浅拷贝和深拷贝

    js实现深拷贝(深度克隆)[https://www.cnblogs.com/cirry/p/13395291.ht...

网友评论

      本文标题:关于js中深度克隆(面试被问了三次)

      本文链接:https://www.haomeiwen.com/subject/etmsgftx.html