深浅拷贝

基本类型值:
种类:number,string,boolean,undefined
特点:做变量传值的时候,内存中会复制一份,做判断的时候,(== 和 ===)的时候仅比较值是否相等
引用类型值
种类:function,object,array,regexp,null
特点:做变量传值的时候,内存中不会复制一份,做判断的时候,(== 和 ===)的时候要看是否是内存中的同一个对象。
[ ] == [ ] -false
{ } =={ } -false
浅克隆
只表层克隆一层,如果数组的某项也是数组,这个内层数组还是内存中的同一个对象
var arr = [1,2,3,[44,55,66]];
var _arr = [];
for(let i = 0;i<arr.length;i++){
_arr.push(arr[i]);
}
//console.log(_arr == arr);
//对象不同了 false
console.log(_arr[3] == arr[3]);
//只克隆了一层
>[ 1, 2, 3, [ 44, 55, 66 ] ]
false
true
深克隆
function deepClone(o){
if(
typeof o == "string"
||
typeof o == "number"
||
typeof o == "boolean"
||
typeof o == "undefined"
){
return o;
}else if(Array.isArray(o)){
var _arr = [];
for(let i = 0;i<arr.length;i++){
_arr.push(deepClone(o[i]));
}
return _arr;
}else if(typeof o == "object"){
var _o = {};
for(var k in o){
_o[k] = deepClone(o[k]);
}
return _o;
}
}
var arr = [1,2,3,[44,55,88,99]];
var arr2 = deepClone(arr);
console.log(arr2);
console.log(arr2[4] == arr[4]);
>[ 1, 2, 3, [ 44, 55, 88, 99 ] ]
true
本文详细解释了JavaScript中深拷贝和浅拷贝的概念。包括基本类型和引用类型的拷贝特性,展示了浅拷贝仅复制一层引用的问题,并通过具体代码实例演示了如何实现深拷贝,确保对象完全独立。
7947

被折叠的 条评论
为什么被折叠?



