中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-11 21:49:33 來源:腳本之家 閱讀:100 作者:king-w 欄目:web開發

本文實例講述了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循環copy
function 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實現深拷貝

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

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

let {...obj4}= obj
console.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面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

彝良县| 漯河市| 潜山县| 隆安县| 东阿县| 永康市| 万荣县| 华容县| 大安市| 大同市| 南投县| 宜宾县| 浙江省| 富宁县| 大石桥市| 临洮县| 运城市| 延川县| 海安县| 喀什市| 大丰市| 冕宁县| 安宁市| 峨山| 磐安县| 云和县| 赤城县| 盐城市| 密山市| 宁明县| 雅江县| 定安县| 壤塘县| 镇雄县| 青浦区| 嘉定区| 容城县| 和田县| 金门县| 博客| 荆州市|