持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天.
- Js基本数据类型: number string null undefined boolean
- 引用类型: Array Object 网上说:基本类型的值在内存中占据固定的大小,被保存在栈内存中,引用类型值是对象,保存在堆内存中。 浅拷贝 :
slice、concat、Object.assign、...、JSON.parse(JSON.Stringfy())只能浅浅的拷贝一层,第二层的引用关系还是存在的。
针对于JavaScript的对象和数组(数组也是对象)浅拷贝只是引用,内存不变;而深拷贝就是递归赋值。深拷贝是不同内存,相互独立。而浅拷贝会影响。
for...in 遍历对象,找出自身的属性,且会搜索原型,即也会查找原型上的属性
__proto__不可枚举的属性
obj.hasOwnProperty() 返回布尔值 判断属性是否是自有属性
深拷贝 递归
function cloneDeep(obj) {
if (obj === null) return null;
if (obj instanceof RegExp) return new RegExp(obj.valueOf());
if (obj instanceof Date) return new Date(obj.valueOf());
if (obj instanceof Boolean) return new Boolean(obj.valueOf());
if (obj instanceof String) return new String(obj.valueOf());
if (obj instanceof Number) return new Number(obj.valueOf());
if (typeof obj !== "object") {
return obj;
}
let clone = new obj.constructor();
for(let key in obj) {
if(!Object.prototype.hasOwnProperty.call(obj, key)) continue;
clone[key] = cloneDeep(obj[key]);
}
return clone
}