摘要:索引對象深拷貝網絡圖片轉在線圖片點擊下載對象深拷貝對象深拷貝對象深拷貝對象深拷貝對象的深拷貝一級屬性拷貝和多級屬性嵌套拷貝深拷貝函數滿足屬性多級嵌套處理重復引用,防止死循環屬性為對象,遞歸深度復制測試對象的深拷貝大錘一級屬性深拷貝的函數特性
索引
1、對象深拷貝
2、網絡圖片轉base64, 在線圖片點擊下載
3、對象深拷貝
4、對象深拷貝
5、對象深拷貝
6、對象深拷貝
1、對象的深拷貝(一級屬性拷貝和多級屬性嵌套拷貝)
//深拷貝函數(滿足屬性多級嵌套) function deepCloneObj(sourceObj){ var obj = (sourceObj instanceof Array) ? [] : {}; for (var key in sourceObj){ var tmp = sourceObj[key]; //處理重復引用,防止死循環 if (tmp === sourceObj){ continue; } if (typeof tmp === "object"){ obj[key] = arguments.callee(tmp); //屬性為對象,遞歸深度復制 } else{ obj[key] = tmp; } } return obj; } //
1、測試對象的深拷貝
var obj = {info:{name:"大錘"}, sign: "xxx"}; var obj2 = Object.assign({}, obj); //一級屬性深拷貝 (es6的Object.assign函數特性) var obj3 = {...obj}; //一級屬性深拷貝 (es6擴展運算符) var obj4 = deepCloneObj(obj); //遞歸深拷貝所有層級屬性 var obj5 = JSON.parse(JSON.stringify(obj)); //深拷貝所有層級屬性 console.log("obj: ", JSON.stringify(obj)); console.log("obj2: ", JSON.stringify(obj2)); console.log("obj3: ", JSON.stringify(obj3)); console.log("obj4: ", JSON.stringify(obj4)); console.log("obj5: ", JSON.stringify(obj5)); console.log(".........end.........."); setTimeout(function(){ obj.sign = "a**b"; obj.info.name = "一二三"; console.log(" ****update info ****"); console.log("obj: ", JSON.stringify(obj)); console.log("obj2: ", JSON.stringify(obj2)); console.log("obj3: ", JSON.stringify(obj3)); console.log("obj4: ", JSON.stringify(obj4)); console.log("obj5: ", JSON.stringify(obj5)); console.log(".........end.........."); },100); /* 打印日志結果: obj: {"info":{"name":"大錘"},"sign":"xxx"} obj2: {"info":{"name":"大錘"},"sign":"xxx"} obj3: {"info":{"name":"大錘"},"sign":"xxx"} obj4: {"info":{"name":"大錘"},"sign":"xxx"} obj5: {"info":{"name":"大錘"},"sign":"xxx"} .........end.......... ****update info **** obj: {"info":{"name":"一二三"},"sign":"a**b"} //只拷貝了第一級屬性 obj2: {"info":{"name":"一二三"},"sign":"xxx"} //只拷貝了第一級屬性 obj3: {"info":{"name":"一二三"},"sign":"xxx"} //只拷貝了第一級屬性 obj4: {"info":{"name":"大錘"},"sign":"xxx"} //所有層級深拷貝 obj5: {"info":{"name":"大錘"},"sign":"xxx"} //所有層級深拷貝 */
//2、測試數組的深拷貝
setTimeout(function(){ console.log(" .....數組的深拷貝測試...."); var arr = [{name: "小明"}, true, 18]; var arr2 = Object.assign([], arr); var arr3 = [...arr2]; var arr4 = deepCloneObj(arr); var arr5 = JSON.parse(JSON.stringify(arr)); console.log("arr: ", JSON.stringify(arr)); console.log("arr2: ", JSON.stringify(arr2)); console.log("arr3: ", JSON.stringify(arr3)); console.log("arr4: ", JSON.stringify(arr4)); console.log("arr5: ", JSON.stringify(arr5)); console.log("......end...... "); setTimeout(function(){ arr[0].name = "五六七", arr[1] = false, arr[2] = 99; console.log("arr: ", JSON.stringify(arr)); console.log("arr2: ", JSON.stringify(arr2)); console.log("arr3: ", JSON.stringify(arr3)); console.log("arr4: ", JSON.stringify(arr4)); console.log("arr5: ", JSON.stringify(arr5)); }, 100); /* 數組測試打印日志結果: .....數組的深拷貝測試.... arr: [{"name":"小明"},true,18] arr2: [{"name":"小明"},true,18] arr3: [{"name":"小明"},true,18] arr4: [{"name":"小明"},true,18] arr5: [{"name":"小明"},true,18] ......end...... arr: [{"name":"五六七"},false,99] arr2: [{"name":"五六七"},true,18] //只拷貝了第一級屬性 arr3: [{"name":"五六七"},true,18] //只拷貝了第一級屬性 arr4: [{"name":"小明"},true,18] //所有層級深拷貝 arr5: [{"name":"小明"},true,18] //所有層級深拷貝 */ },1000);
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/108769.html
摘要:基礎問題的的性能及原理之區別詳解備忘筆記深入理解流水線抽象關鍵字修飾符知識點總結必看篇中的關鍵字解析回調機制解讀抽象類與三大特征時間和時間戳的相互轉換為什么要使用內部類對象鎖和類鎖的區別,,優缺點及比較提高篇八詳解內部類單例模式和 Java基礎問題 String的+的性能及原理 java之yield(),sleep(),wait()區別詳解-備忘筆記 深入理解Java Stream流水...
摘要:基礎問題的的性能及原理之區別詳解備忘筆記深入理解流水線抽象關鍵字修飾符知識點總結必看篇中的關鍵字解析回調機制解讀抽象類與三大特征時間和時間戳的相互轉換為什么要使用內部類對象鎖和類鎖的區別,,優缺點及比較提高篇八詳解內部類單例模式和 Java基礎問題 String的+的性能及原理 java之yield(),sleep(),wait()區別詳解-備忘筆記 深入理解Java Stream流水...
閱讀 2301·2021-09-30 09:47
閱讀 2219·2021-09-26 09:55
閱讀 2947·2021-09-24 10:27
閱讀 1539·2019-08-27 10:54
閱讀 966·2019-08-26 13:40
閱讀 2495·2019-08-26 13:24
閱讀 2418·2019-08-26 13:22
閱讀 1728·2019-08-23 18:38