js中深拷贝和浅拷贝

对于问题:

var obj1 = {name:'小明'};

var obj2 = obj1;

obj2.name = "小红";

// obj1.name = ?? 

console.log(obj1.name);// 小红

想让obj1的名字不改变的方法。

1.实现方法最简单的方法

var obj1 = {name:'小明'}

var obj2 = JSON.parse(JSON.stringfy(obj1));

优点:简单方便快捷

缺点:会导致obj1里面的function消失。

2.使用递归的方法遍历属性,重新赋值

var cloneObj = function(obj){

var str, newobj = obj.constructor === Array ? [] : {};

if(typeof obj !== 'object'){

return;

} else if(window.JSON){

str = JSON.stringify(obj), //系列化对象

newobj = JSON.parse(str); //还原

} else {

for(var i in obj){

newobj[i] = typeof obj[i] === 'object' ?

cloneObj(obj[i]) : obj[i];

}

}

return newobj;

};

3.使用jquery的$.extend()

jQuery.extend(true,{a:{a:"a"}},{a:{b:"b"}}); // 深拷贝true

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在 JS 中有一些基本类型像是Number、String、Boolean,而对象就是像这样的东西{ name: '...
    tobAlier阅读 584评论 0 0
  • 引用类型有哪些?非引用类型有哪些?非引用类型有number、string、boolean、undefined、nu...
    毕子歌阅读 254评论 0 0
  • 引用类型有哪些?非引用类型有哪些? JS中的数据类型分为基本类型和引用类型。基本类型:数值(number)、字符串...
    LeeoZz阅读 275评论 0 0
  • 基础类型有哪些?复杂类型有哪些?有什么特征?5种简单数据类型(基本数据类型):Undefined、Null、Boo...
    coolheadedY阅读 329评论 0 0
  • 问答 基础类型有哪些?复杂类型有哪些?有什么特征?答:基础类型:数字number字符串string布尔值boole...
    饥人谷_桶饭阅读 299评论 0 0