一、深拷貝背景
我們需要得到乙份新的data,增刪改查操作都不會影響原始資料。請問如何實現,如下
原因是因為應用型別的賦值,只是修改了指標的指向 。可查mdn資料型別
二、陣列的一層拷貝
slice
concat
[...]
迴圈
var arr = [1,2,3];
var arr1,arr2,arr3;
arr1 = arr.slice(0);
arr2 = arr.concat();
arr3 = [...arr];
arr[0]=100;
console.log(arr,arr1,arr2,arr3);
二.一、物件的一層拷貝object.assign
var obj =
var obj1,obj2;
obj1 = object.assign({},obj);
obj2 = ;
obj.name = '你全家都叫zh'
console.log(obj,obj1,obj2);
三、多層深拷貝思路:非object型別,直接賦值
遞迴目標物件的每一項
// 深拷貝
var array = [,,
];function shencopy(obj)
var res = array.isarray(obj)?:{};
for(let i in obj)
return res
} console.log(shencopy(array));
ps:涉及知識點
1、基本資料型別、應用型別 mdn
2、typeof返回 mdn
3、陣列、物件判斷
var arr = [1,2,3];
var obj =
//方法一 constructor
obj.constructor === object
arr.constructor === array
// 方法二 instanceof
arr instanceof array
obj instanceof object
//方法三 object.prototype.tostring
object.prototype.tostring.call(arr) === "[object array]"
object.prototype.tostring.call(obj) === "[object object]"
// 方法四 array.isarray
array.isarray(arr)
4、object.prototype.tostring.call()引發的思考 檢視
為什麼判斷物件、陣列要用object的tostring 而不用別的tostring?
5、for in / for of
for...in
語句以任意順序遍歷乙個物件的除symbol以外的可列舉屬性。for...of
語句在可迭代物件(包括array
,map
,set
,string
,typedarray
,arguments 物件等等)上建立乙個迭代迴圈,呼叫自定義迭代鉤子,並為每個不同屬性的值執行語句
js遍歷陣列(物件)
例 let arr 1,2,3 for let i 0 iconsole.log arr i 輸出結果 1 2 3 例 let arr 1,2,3 for let i in arr 輸出結果 1 2 3 說明 同普通for迴圈,以key遍歷查詢陣列或物件 例 let arr 1,2,3 for le...
遍歷陣列,遍歷物件的方法
遍歷陣列 方法1 for 迴圈 使用臨時變數將陣列長度快取起來,避免重複獲取陣列長度 for var i 0,leng arr.length i leng i 方法2 foreach迴圈 遍歷陣列中的每一項,沒有返回值,對原陣列沒有影響,不支援ie arr.foreach item,index,ar...
javascript實現陣列或物件的深拷貝
第一 簡單粗暴 let arr 1,let copyarr json.parse json.stringify arr console.log copyarr 1,arr 1 a 3 console.log copyarr 1,copyarr 1 a 5 console.log arr 1,可以看出...