国产探花免费观看_亚洲丰满少妇自慰呻吟_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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 哈尔滨市| 集贤县| 洛南县| 南昌县| 奎屯市| 龙口市| 兴业县| 资源县| 安陆市| 隆德县| 岳池县| 固镇县| 衡水市| 日土县| 湘乡市| 曲沃县| 九龙城区| 祁阳县| 枣强县| 上栗县| 壤塘县| 望都县| 漳州市| 宾川县| 英超| 罗源县| 廉江市| 彝良县| 尚义县| 张家口市| 成都市| 罗江县| 修武县| 宜城市| 建湖县| 怀仁县| 定结县| 盖州市| 东兰县| 娄烦县| 乐陵市|