js物件深拷貝

2022-02-26 20:08:30 字數 1029 閱讀 3918

由於引用型別(陣列、物件)是按位址傳遞,直接拷貝是淺拷貝,即修改拷貝後的變數,原變數也會改變。有時需要深拷貝乙個物件,這時就需要遍歷徹底複製,使原物件和拷貝物件完全脫離關係。

**:

function

deepcloneobj(obj);

for(i in

obj)

}return

o; }

實現細節:假定傳入的是乙個引用型別,首先判定傳入的是陣列還是物件,根據判定結果,確定o是初始化為空陣列還是空物件。之後遍歷傳入引用型別的自有屬性,並判定屬性是否為物件,如果是的話做遞迴,否則直接複製給o。

陣列例項:

var arr1 = ["sfsag","akghak","['fafa','gaag','rwet']",125];

console.log(arr1);

//["sfsag", "akghak", "['fafa','gaag','rwet']", 125]

var arr2 =deepcloneobj(arr1);

arr1.push("newstr");

console.log(arr1);

//["sfsag", "akghak", "['fafa','gaag','rwet']", 125, "newstr"]

console.log(arr2);//

["sfsag", "akghak", "['fafa','gaag','rwet']", 125]

物件例項:

var obj1 = ,asga:['aff','ghh','wegwer',12],segg:1};

console.log(obj1);

//object

var obj2 =deepcloneobj(obj1);

obj1['newstr'] = ['fsg','gsr'];

console.log(obj1);

//object

console.log(obj2);//

object

js 物件深拷貝 深拷貝與淺拷貝

前言 最近在複習一些面試的知識點,剛剛好複習到了這一部分,於是就寫下這篇文章記錄一下。一 值型別和引用型別 在學習深拷貝和淺拷貝之前,我們先來了解一下js的變數型別。值型別 vs 引用型別 值型別 值型別主要有 number,string,boolean,symbol,null,undefined ...

js 物件深拷貝 關於JS深拷貝的學習

看了好多文章講js深拷貝的,但是測試了一下,還有很多地方不完善的,結合別人的 和自己的理解,自己實現了乙個深拷貝。首先要考慮拷貝的目標物件是不是 null,因為 typeof null 結果是 object,如果是null就直接返回null。然後我們再判斷各種包裝物件,因為基本資料型別的包裝物件,n...

js 日期物件深拷貝

常用的深拷貝的方法不適用於日期的深拷貝,對於date 型別,需使用下面的方法。更詳細的物件深拷貝方法請參考 寫的很詳細 因為valueof方法,日期類定義的valueof 方法會返回它的乙個內部表示 1970年1月1日以來的毫秒數.因此我們可以在date的原型上定義轉殖的方法 date.protot...