深度轉殖 拷貝資料

2021-10-01 17:29:21 字數 2062 閱讀 8886

1. 基本資料型別

按值傳遞,拷貝後直接生成乙份行的資料,不會影響原來的值
2. 物件、陣列
實際上也是按值傳遞

不同的是陣列和物件在變數裡面存的實際上是乙個位址值,所以是傳遞的位址,也就是引用,修改會影響原來的值

1. 直接賦值乙個變數(淺轉殖)
var obj =

var obj1 = obj;

obj1.stuage =32;

console.

log(obj)

;//

console.

log(obj1)

;//

2. 物件:object.assign()(淺轉殖)
var obj =

var obj2 = object.

assign

(obj)

;obj2.stuage =32;

console.

log(obj)

;//

console.

log(obj2)

;//

3. 陣列:array.prototype.concat()(淺轉殖)
var arr =[1

,2,3

,];//不傳參表示複製原陣列到新陣列

var arr1 = arr.

concat()

;arr1[0]

=4;arr1[3]

.stuage =32;

console.

log(arr)

;// [1, 2, 3, ]

console.

log(arr1)

;// [4, 2, 3, ]

陣列中的基本資料型別可以實現深轉殖,但是引用資料還是只能淺轉殖

4. 陣列:array.prototype.slice()(淺轉殖)

var arr =[1

,2,3

,];//不傳參表示複製原陣列到新陣列

var arr2 = arr.

slice()

;arr2[0]

=4;arr2[3]

.stuage =32;

console.

log(arr)

;// [1, 2, 3, ]

console.

log(arr2)

;// [4, 2, 3, ]

// 檢測資料型別的函式

function

checkedtype

(target)

function

deepclone

(target);}

else

if(targettype ===

'array'

)else

// 遍歷目標資料

for(

let i in target)

else

}// 返回結果

return result;

}

測試1:
var arr =[1

,2,3

,];arr3 =

deepclone

(arr)

;arr3[0]

=4;arr3[3]

.stuage =32;

console.

log(arr)

;// [1, 2, 3, ]

console.

log(arr3)

;// [4, 2, 3, ]

測試2
var obj =,}

;obj3 =

deepclone

(obj)

;obj3.stuage =32;

obj3.skills.

push

("html5");

console.

log(obj)

;//

console.

log(obj3)

;//

深度轉殖 淺拷貝

轉殖其實就是拷貝 就是複製 這是主要是針對引用資料型別來說的 也就是說在底層儲存的時候 使用堆疊儲存的 我們主要針對的物件是 陣列 物件 因為只有他們才是引用型別 堆疊空間儲存 拷貝涉及到兩種拷貝 淺拷貝指的是 我們在拷貝被物件的時候 只是拷貝物件的位址 不是拷貝儲存 等同於給乙個人去兩個名字 那麼...

深拷貝 淺拷貝 資料型別

1 不可變型別 包括數值 字串 元組 不可變指的是不能改變引用,只能放置乙個新的引用 2 可變型別 包括列表和字典 可變指的是當向列表或字典裡面增刪改時,引用沒有受到影響 進一步解釋可變與不可變,是指記憶體中的那塊內容 value 是否可以被改變。如果是不可變型別,在對物件本身操作的時候,必須在記憶...

Linux多程序拷貝資料

include include include include include 執行格式 a.out j 4 srcfile dstfile 獲得檔案的大小 int getfilesize const char filename 每個程序如何拷貝資料 void copy frag const cha...