谈谈JS中的拷贝Copy复制的方法(Javascript拷贝)
拷贝(Copy),都是基于引用类数据来说的,基本数据类型直接在Heap中直接拷贝一份,引用数据类型分为浅拷贝和深拷贝;虽然现在有很多数据库,直接封装好了一部分代码,我们直接引用就可以,比如Lodash,它的代码封装比较完善,但是我们还是要简单了解下拷贝的知识;浅拷贝:复制的是一个引用地址,如果地址内的内容发生改变,所有的内容都会改变;深拷贝:在内存中开辟出一块地盘,存放复制过来的对象;例子我就不写
拷贝(Copy),都是基于引用类数据来说的,基本数据类型直接在Heap中直接拷贝一份,引用数据类型分为浅拷贝和深拷贝;
虽然现在有很多数据库,直接封装好了一部分代码,我们直接引用就可以,比如Lodash,它的代码封装比较完善,但是我们还是要简单了解下拷贝的知识;
浅拷贝:复制的是一个引用地址,如果地址内的内容发生改变,所有的内容都会改变;
深拷贝:在内存中开辟出一块地盘,存放复制过来的对象;
例子我就不写了,直接封装函数,然后调用就可以了,有浅拷贝和深拷贝的几种写法,如有错,请指正,也不是我的原创,毕竟只是知识点,但是不知道转载谁的,所以如有侵权,请告知,谢谢
方法一: $qian();
function $qian(obj) {
let newObj = {};
for (let a in obj) {
if (obj.hasOwnProperty(a)) {
newObj[a] = obj[a];
};
};
return newObj;
};
方法二:$copy(a) 也是浅拷贝的一种
function $copy (obj){
return Array.isArray(obj) ? [...obj] : {...obj}
// return obj instanceof Array ? [...obj] : {...obj}
}
方法三 Object.assign(); 也是浅拷贝的一种
function copyAssign(obj) {
return obj instanceof Array ? Object.assign([],obj) : Object.assign({},obj);
}
方法四 JSON.parse(JSON.stringify());深拷贝的一种,通过JSON的转换,变成一个新的对象
function copyJSON(obj) {
return JSON.parse(JSON.stringify(obj))
}
方法五 递归的封装Copy 深拷贝的一种
function deepCopy1(obj) {
const getType = (obj) => {
if (typeof obj !== 'object') {
return obj;
};
return Object.prototype.toString.call(obj).slice(8, -1);
};
let newObj = getType(obj) == 'Array' ? [] : {};
for (let a in obj) {
newObj[a] = typeof obj[a] === 'object' ? deepCopy1(obj[a]) : obj[a];
};
return newObj;
}
方法六 ;就是外部引用lodash文档,使用封装好的copy刚能函数
如果还有其他的方法,欢迎大家来交流
更多推荐
所有评论(0)