We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
要了解深浅拷贝,首先要了解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; }
The text was updated successfully, but these errors were encountered:
No branches or pull requests
简介
要了解深浅拷贝,首先要了解js里面的数据类型,js里面共有两种数据类型,第一类5种基本类型,第二类1种引用类型,二者的主要区别如下
传值与传址的区别,两者都是针对变量在赋值的时候而言的,传值指的时值得传递(即基本类型的赋值),传址指的是引用的赋值(及引用类型的赋值)
浅拷贝
深拷贝
深拷贝核心思想就是递归去复制所有的引用类型,然后在复制的时候需要区分下数组与对象,可以复制函数
The text was updated successfully, but these errors were encountered: