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, ]
測試2var 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...