值类型VS引用类型
区别:值类型的值存在栈中,引用类型的值刚在堆中。
- 值类型
String,Undefined,Number,Boolean,Symbol - 引用类型
Object,Array,null(特殊引用类型,指针指向为空地址)
typeof运算符
- 识别所有的值类型
- 识别函数
- 判断是否是引用类型
深拷贝
- 判断是不是对象,或者是数组。如果不是,就直接返回
- 初始化返回结果,定义数组跟对象的格式
- 遍历
1.hasOwnProperty //保证key不是原型里面的属性
2.递归调用
/**
*
* @param {Object} obj 要拷贝的对象
*/
function deepClone(obj = {} ) {
// 判断obj类型,如果不是数组或者对象,返回
if ( typeof obj !== 'object' || typeof obj == null){
return obj
}
// 初始化返回结果
let temp
if (obj instanceof Array) {
temp = [];
} else {
temp = {};
}
for (let key in obj) {
// 保证key不是原型的属性
if (obj.hasOwnProperty(key)) {
// 递归调用
temp[key]=deepClone(obj[key])
}
}
return temp
}