简单数据类型(值类型):Number,String,undefined,null,boolean,symbol
复杂数据类型(引用类型):function,Array,object, date,math,regexp(正则)
区别:
如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。
深拷贝的方法
1、obj2=JSON.parse(JSON.stringify(obj1))
缺点:
1、函数无法拷贝
2、正则无法拷贝
3、undefined无法拷贝
优点:
二级以下也能拷贝
2、Object.assign(obj1,obj2)
优点:
1、可以拷贝函数
2、可以拷贝正则
3、可以拷贝undefined
缺点:
二级以下无法实现深拷贝,只能实现浅拷贝
手写深拷贝:
function deepClone(obj) {
if (typeof obj !== 'object' || obj == null) {
return obj;//当判断为简单数据类型时,直接复制
}
let result;
if (obj instanceof Array) {
result = []
} else {
result = {}
}
for (let key in obj) {
if (obj.hasOwnProperty(key)) {//判断对象是否存在key属性
result[key] = deepClone(obj[key]);//递归,直到是原始值
}
}
return result;
}