国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

JavaScript實現淺拷貝與深拷貝的方法分析

2024-05-06 16:45:07
字體:
來源:轉載
供稿:網友

本文實例講述了JavaScript實現淺拷貝與深拷貝的方法。分享給大家供大家參考,具體如下:

平時使用數組復制時,我們大多數會使用‘=',這只是淺拷貝,存在很多問題。比如

let arr = [1,2,3,4,5];let arr2 = arr;console.log(arr) //[1, 2, 3, 4, 5]console.log(arr2) //[1, 2, 3, 4, 5]arr[0] = 6;console.log(arr) //[6, 2, 3, 4, 5]console.log(arr2) //[6, 2, 3, 4, 5]arr2[4] = 7;console.log(arr) //[6, 2, 3, 4, 7]console.log(arr2) //[6, 2, 3, 4, 7]

很明顯,淺拷貝下,拷貝和被拷貝的數組會相互受到影響。所以,必須要有一種不受影響的方法,那就是深拷貝。

深拷貝的實現方式有很多種。

一、for循環實現深拷貝

//for循環copyfunction copy(arr) {    let cArr = []    for(let i = 0; i < arr.length; i++){      cArr.push(arr[i])    }    return cArr;}let arr3 = [1,2,3,4];let arr4 = copy(arr3) //[1,2,3,4]console.log(arr4) //[1,2,3,4]arr3[0] = 5;console.log(arr3) //[5,2,3,4]console.log(arr4) //[1,2,3,4]

二、slice方法實現深拷貝

//slice實現深拷貝let arr5 = [1,2,3,4];let arr6 = arr5.slice(0);arr5[0] = 5;console.log(arr5); //[5,2,3,4]console.log(arr6); //[1,2,3,4]

三、concat實現深拷貝

//concat實現深拷貝let arr7 = [1,2,3,4];let arr8 = arr7.concat();arr7[0] = 5;console.log(arr7); //[5,2,3,4]console.log(arr8); //[1,2,3,4]

四、es6擴展運算實現深拷貝

//es6擴展運算實現深拷貝let arr9 = [1,2,3,4];let [...arr10] = arr9;arr9[0] = 5;console.log(arr9) //[5,2,3,4]console.log(arr10) //[1,2,3,4]

五、對象的循環深拷貝

//  循環copy對象let obj = {    id:'0',    name:'king',    sex:'man'}let obj2 = copy2(obj)function copy2(obj) {    let cObj = {};    for(var key in obj){      cObj[key] = obj[key]    }    return cObj}console.log(obj) //{id: "0", name: "king", sex: "man"}console.log(obj2) //{id: "0", name: "king", sex: "man"}

六、對象轉換成json實現深拷貝

//轉換成jsonlet obj3 = JSON.parse(JSON.stringify(obj));console.log(obj3) //{id: "0", name: "king", sex: "man"}

七、es6擴展運算實現深拷貝

let {...obj4}= objconsole.log(obj4) //{id: "0", name: "king", sex: "man"}

八、通用深拷貝

var clone = function (v) {    var o = v.constructor === Array ? [] : {};    for(var i in v){      o[i] = typeof v[i] === "object" ? clone(v[i]) : v[i];    }    return o;}

總結:深刻理解javascript的深淺拷貝,可以靈活的運用數組,并且可以避免很多bug。

希望本文所述對大家JavaScript程序設計有所幫助。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大连市| 昌吉市| 民权县| 宿迁市| 改则县| 大竹县| 黄浦区| 孟村| 北川| 澜沧| 沙田区| 尚义县| 疏勒县| 揭西县| 克东县| 山丹县| 苏尼特右旗| 遵化市| 施秉县| 德清县| 工布江达县| 府谷县| 柞水县| 乐陵市| 礼泉县| 平凉市| 册亨县| 织金县| 重庆市| 云浮市| 龙游县| 吴堡县| 邹城市| 太和县| 缙云县| 中方县| 泾阳县| 子长县| 安仁县| 嘉祥县| 永康市|