Open willson-wang opened 6 years ago
要了解深浅拷贝,首先要了解js里面的数据类型,js里面共有两种数据类型,第一类5种基本类型,第二类1种引用类型,二者的主要区别如下
传值与传址的区别,两者都是针对变量在赋值的时候而言的,传值指的时值得传递(即基本类型的赋值),传址指的是引用的赋值(及引用类型的赋值)
var shallowCopy = function (src){ var obj = {}; for(var prop in src){ if(src.hasOwnProperty(prop)){ obj[prop] = src[prop] } } return obj }
深拷贝核心思想就是递归去复制所有的引用类型,然后在复制的时候需要区分下数组与对象,可以复制函数
// 第一种方式 var deepCopy = function (source,target){ var c = target || {}; for(var prop in source){ if(typeof source[prop] === "object"){ if(source[prop].constructor === Array){ c[prop] = []; }else if (source[prop].constructor === Object){ c[prop] = {}; } deepCopy(source[prop],c[prop]); }else { c[prop] = source[prop] } } return c } // 第二种方式 var deepCopy2 = function (obj) { return JSON.parse(JSON.stringify(obj)); } // 第三种方式与第一种一样只是换个写法 var deepCopy3 = function(obj) { if (typeof obj !== 'object') return; var newObj = obj instanceof Array ? [] : {}; for (var key in obj) { if (obj.hasOwnProperty(key)) { newObj[key] = typeof obj[key] === 'object' ? deepCopy3(obj[key]) : obj[key]; } } return newObj; }
简介
要了解深浅拷贝,首先要了解js里面的数据类型,js里面共有两种数据类型,第一类5种基本类型,第二类1种引用类型,二者的主要区别如下
传值与传址的区别,两者都是针对变量在赋值的时候而言的,传值指的时值得传递(即基本类型的赋值),传址指的是引用的赋值(及引用类型的赋值)
浅拷贝
深拷贝
深拷贝核心思想就是递归去复制所有的引用类型,然后在复制的时候需要区分下数组与对象,可以复制函数