简单的对象深拷贝使用 JSON.parse 和 JSON.stringify 但是遇到 undefined,function,Symbol 的时候会在转换过程中忽略, 也就是复制不了这些类型的数据. eg:
- var syb = Symbol('obj');
- var person = {
- name:'tino',
- say:function(){
- console.log('hi')
- },
- ok:syb,
- un:undefined
- };
- var copy = JSON.parse(JSON.stringify(person)); //{name:'tino'}
如上所述, 如果要复制的对象里面含有这些数据将不被拷贝, 然后我们再换一个方法, 我们自己封装一个函数来解决.
- var arr = [{name:"塞内加尔",color:"pink"},{name:"乌斯怀亚",color:"orange"}];
- function deepCopy(obj){
- var result = Array.isArray(obj)?[]:{};
- for(var key in obj){
- if(obj.hasOwnProperty(key)){
- if(typeof obj[key]==="object"){
- result[key] = deepCopy(obj[key]); // 递归复制
- }else{
- result[key] = obj[key];
- }
- }
- }
- return result;
- }
- console.log(deepCopy(person));
- //{
- // name:'tino',
- // say:function(){
- // console.log('hi')
- // },
- // ok:syb,
- // un:undefined
- //}
- console.log(arr);// [{name:"塞内加尔",color:"pink"},{name:"乌斯怀亚",color:"orange"}]
来源: http://www.jianshu.com/p/6dec93c30fd4