JavaScript、JQuery深拷貝、淺拷貝__javascript

來源:互聯網
上載者:User

沒有拷貝的情況

var obj = {    a:10};var obj2 = obj;obj2.a = 20;alert(obj.a); ==> 20  //賦值操作會直接修改obj.a的值

JavaScript的深拷貝和淺拷貝

一、 JavaScript的淺拷貝
淺拷貝只會將對象的各個屬性進行依次複製,並不會進行遞迴複製,而 JavaScript 儲存物件都是存地址的,所以淺複製會導致 obj.arr 和 shallowObj.arr 指向同一塊記憶體位址

var obj = {    a:10}function copy(obj){    var newObj = {};    for(var attr in obj){        newObj[attr] = obj[attr];    }    return newObj;}var obj2 = copy(obj);obj2.a = 20;alert(obj.a);   ==> 10

二、JavaScript的淺拷貝存在的問題

var obj = {    a:{        b:10    }}function copy(obj){    var newObj = {};    for(var attr in obj){        newObj[attr] = obj[attr];    }    return newObj;}var obj2 = copy(obj);obj2.a.b = 20;alert(obj.a.b); ==>20

JavaScript的深拷貝

一、深拷貝需要考慮遞迴的概念
深拷貝不僅將原對象的各個屬性逐個複製出去,而且將原對象各個屬性所包含的對象也依次採用深複製的方法遞迴複製到新對象上。這就不會存在上面 obj 和 shallowObj 的 arr 屬性指向同一個對象的問題。

// 遞迴函式(階乘)function digui(n){    if(n==1){        return 1;    }    return n*digui(n-1);}alert(digui(5));

二、深拷貝

var obj = {    a:{        b:10    }}function deepCopy(obj){    if(typeof obj != 'object'){        return obj;    }    var newObj = {};    for(var attr in obj){        newObj[attr] = deepCopy(obj[attr]);    }    return newObj;}var obj2 = deepCopy(obj);obj2.a.b = 20;alert(obj.a.b); ==>10

JQuery的深拷貝和淺拷貝

$.extend在JQ中的深拷貝 和 淺拷貝
var a = {};
var b = { name : { age : 30 } };

淺拷貝
$.extend( a , b );

加入參數true後就是深拷貝
$.extend( true , a , b );

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.