日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 默认站点!

默认站点

當前位置: 首頁 >

JS如何深度复制对象和数组,避免指针变量引用修改值

發布時間:2023/11/27 24 豆豆
默认站点 收集整理的這篇文章主要介紹了 JS如何深度复制对象和数组,避免指针变量引用修改值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//自定義深度復制對象or數組的遞歸方法----------------------------------------
let copyObjOrArr = o => {let isArray = o instanceof Array;let isObject = o instanceof Object;if (!isObject) return o;     let n = (isArray ? [] : {});for (let k in o) n[k] = copyObjOrArr(o[k]);     return n;
}//測試----------------------------------------var obj={a:1};
var arr=[1,2,3];
var obj_new =copyObjOrArr(obj);
var arr_new =copyObjOrArr(arr);console.log(obj_new);
console.log(arr_new);

如上圖所示這樣復制對象or數組就不會產生指針變量那種修改的情況了?


BUT!

我依然覺得上面的代碼肽冗余,本質上我們只要復制了內容,并且保證變量指向的內存地址也發生改變就可以了

此刻,我想起了JSON.parse(JSON.stringify( objectOrArray )),這個把對象轉為字符串再反轉為對象的過程,就可以完成一次內存地址變更,于是有了代碼

var obj={a:1};
var arr=[1,2,3];
var obj_new = JSON.parse(JSON.stringify( obj ));
var arr_new = JSON.parse(JSON.stringify( arr ));//測試----------------------------------------var obj={a:1};
var arr=[1,2,3];
var obj_new =copyObjOrArr(obj);
var arr_new =copyObjOrArr(arr);console.log(obj_new);
console.log(arr_new);

實驗結果完美!

JSON.parse(JSON.stringify( objectOrArray ))完全無需額外定義方法,最原汁原味的騷操作!

這樣復制一下,你的對象就不再是以前的對象,你的數組也不再是以前的數組了!!!



?那么問題來了,為啥不這樣操作,就會導致變量修改了會影響被復制的變量值呢?js中Object類型和Array類型的變量被賦值(復制)給其他變量后,修改被賦值(復制)的新變量的值,會影響原始變量的值,這是為什么呢?_你摯愛的強哥?給你發來1條消息?-CSDN博客JavaScript中的Object和Array都是指針變量類型,例如我聲明let obj={a:1};let arr=[1,2,3];其中的obj和arr存放的僅僅是對應的對象和數組內容所存放的內存地址值當你用以下代碼賦值給另外的新變量的時候let obj={a:1};let arr=[1,2,3];let obj_new=obj;let arr_new=arr;我們對 obj_new 和 arr_new 的內容進行修改,原始的 obj 和 arr 變量的值也會https://s-z-q.blog.csdn.net/article/details/121134588

總結

以上是默认站点為你收集整理的JS如何深度复制对象和数组,避免指针变量引用修改值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得默认站点網站內容還不錯,歡迎將默认站点推薦給好友。