js中的深度克隆和浅度克隆
浅度克隆
var obj = {age:26}; //把存在栈里的索引值复制给了obj1,指向同一份数据 var obj1 = obj; console.log(obj1);//{age: 26} obj.name = '张三'; //当obj的值改变时,obj1也跟着改变 console.log(obj1);//{age: 26, name: "张三"}
深度克隆
分析:
1.判断是不是原始值 typeof
2.判断是数组还是对象 toString
3.建立对应的数组或对象
4.for...in 循环 遍历
target 目标 origin 起源
function myClone(origin,target){ //先看看target有没有值 var target = target || {}; // 把判断数据类型的方法赋值给变量 var toStr = Object.prototype.toString; // 把判断数组的返回结果赋值给变量 var arrStr = '[object Array]'; // 循环遍历对象 for(var key in origin){ // 判断对象的属性/方法是否是自身的 if(origin.hasOwnProperty(key)){ // 利用typeof判断对象的返回值是否是对象,并且不为空null if(typeof(origin[key]) == 'object' && origin[key] !== null){ // 核心步骤 // 三元运算符 target[key] = toStr.call(origin[key]) == arrStr ? [] : {}; myClone(origin[key],target[key]); }else{ target[key] = origin[key]; } } } return target; } var obj = { a:'abc', b:{ b1:[1,2,3,4,5], b2:'xyz' }, c:[9,8,7,6,5], d:{ d1:function(){}, d2:{ dd1:'test', dd2:{ ddd1:'demo' } } } } var obj1 = myClone(obj); console.log(obj1);
浙公网安备 33010602011771号