1、JavaScript的数据类型:基本数据类型、引用数据类型。
基本数据类型:保存在栈内存的简单数据段(undefined,boolean,number,string,null)。
引用数据类型:Array,对象,Function保存在堆内存中。
浅拷贝:只复制指向某个对象的指针,而不复制对象本身,新旧对象共享一块内存
深拷贝:复制并创建一个一摸一样的对象,不共享内存,修改新对象,旧对象保持不变
2 、递归的方法实现深拷贝
functiondeepclone(obj){
let objClone = Array.isArray(obj) ? [] : {};
if (obj && typeof obj === "object") {
for (key in obj) {
//if (obj.hasOwnProperty(key)) { //也可以不加
if (obj[key] && typeof obj[key] === "object") {
objClone[key] = deepclone(obj[key])
} else {
objClone[key] = obj[key]
}
//}
}
}
return objClone
}
var a = [1, 2, 3, 4];
var b = deepclone(a);
a[0] = 8 console.log(a, b);
Array.isArray(obj):ECMAScript 5.1 (ECMA-262) 考虑到的兼容性,可以用下面的方法实现较好的兼容
if (!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
}
3、用JSON.stringify把对象转成字符串,再用JSON.parse把字符串转成新的对象
functiondeepclone(obj){
var _obj = JSON.stringify(obj);
var cloneObj = JSON.parse(_obj);
return cloneObj
}
var a =[1,2,3,4];
var b= deepclone(a);
a[0]=8 console.log(a,b);
网友评论