1. 一些基础知识
Number、String、Boolean、Null、Undefined
和引用(对象)数据类型=>Object包括有Function、Array、Date
;2. 深浅拷贝
3. 方法
newObj = object.assign({},obj)
;const newObj = {...obj}
;newArr = arr.slice(0)
;newArr = [].concat(arr,arr2,…)
;const obj = { a:6, b:undefined, arr:[1,2,3], fun:()=>{}}
const newObj = Object.assign({},obj)
obj.arr[0]=99
console.log(obj,newObj);
newObj = JSON.parse(JSON.stringify(obj))
,但是此方法在数据类型为function和undefined情况下无法复制;示例以下:const obj = { a:6, b:undefined, arr:[1,2,3], fun:()=>{}}
const newObj = JSON.parse(JSON.stringify(obj))
obj.arr[0]=99
console.log(obj, newObj);
function deepClone(obj) {
let newObj = null;
// 判断数据类型是否是复杂的数据类型,如果是则往下走,不是则直接赋值
// null不可以进行循环但又是object,需要判断
if (typeof (obj) == 'object' && obj !== null) {
newObj = obj instanceof Array ? [] : {};
// 循环obj的每一项,如果还有复杂的数据类型,再次递归
for (let i in obj) {
newObj[i] = deepClone(obj[i])
}
} else {
newObj = obj
}
return newObj;
}
const obj = {
a: "test",
b:undefined,
arr:[1,2,3],
main: {
a: 1,
b: 2
},
fun:()=>{}
}
let newObj = deepClone(obj);
newObj.a = '修改值';
newObj.main.a = 110;
newObj.arr[0] = 99;
console.log(obj, newObj);