// 定义一个深拷贝方法
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)){
// 如果是,赋值(递归复制深层)
result[key] = deepClone(obj[key])
}
}
// 返回结果数据
return result
}
注意:
1、typeOf obj !== 'object'
判断时,object的o一定为小写;
2、obj == null
为obj === null || obj === undefined的简写;
3、for…in和for…of的区别:
for…in:(1)es5标准,遍历的是key;(2)遍历数组无序;(3)会遍历出原型属性;(4)兼容性:IE9以下不兼容;(建议用来遍历对象)
for…of:(1)es6标准,遍历的是value;(2)遍历数组有序,并且可执行continue,break和return;(3)不会遍历出原型属性;(4)兼容性:IE不支持;(建议用来遍历数组);