标签:lin typeof json格式 改变 stringfy color end images 结果
1.什么是浅拷贝?
开发时会遇到这样的问题,
首先我们有一个对象 var obj1 = {a:1, b:2, c:3,........}(里面内容超多),里面存放了一些原始的数据,因为项目中有好多地方要用到这个数据,所以我不想改变这个obj1。
然后有个地方要用到这样的一个对象obj2 = {a:1, b:20000, c:3........}, 我不想重新写一遍这个数据了,太占地方了,这时候我想到了一个方法,如下代码
var obj1 = {a:1, b:2, c:3,........};
var obj2 = obj1;
obj2.b = 200;
console.log(obj2); // 得到了想要的数据obj2 = {a:1, b:20000, c:3........}
聪明吧??,但是我只能说too young too simple
在上面代码的基础上 加上代码 console.log(obj1) // 得到结果是 {a:1, b:20000, c:3........}
如图
??这咋回事啊?
嗯,这就是浅拷贝。。
浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。
那怎么才能得到我想要的结果啊???
用深拷贝呀!
深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象
那怎么实现深拷贝呢?
1.手动复制: 自己在写一遍。(好蠢的方法)
2.Object.assign,ES6 的新函数:var obj2 = Object.assign({}, obj1);(这个好??)
3.var obj2 = JSON.parse(JSON.stringfy(obj1)) :
用JSON.stringify把对象转成字符串,再用JSON.parse把字符串转成新的对象。
缺点:只有可以转成JSON格式的对象才可以这样用,像function没办法转成JSON。
4.jquery,中的 $.extend方法可实现深拷贝。
5.递归方法实现
标签:lin typeof json格式 改变 stringfy color end images 结果
原文地址:http://www.cnblogs.com/sunweinan/p/7509215.html