js--深浅拷贝
讲在之前
- 深浅拷贝只针对引用对象
- 对于部分基本数据类型,如number、string、boolean等,采用字面量赋值,他们都是值复制,又因为他们只有值,故赋值的过程,其实就是创建了新的值,不过值相等罢了。
- 提一嘴:为什么作为非引用类型,他们居然有方法用?因为number、string、boolean有原始包装类型,在使用方法时,会短暂的创建一个包装类型实例,使用完方法后就会销毁。因为是对象,我们没必要自己去创建一个对象只保存一个值,浪费堆内存。
浅拷贝
只复制一层
深拷贝
复制所有层
浅拷贝方法
- Object.assign( { }, obj1 );
- [ ].concat( nums )
- slice( )
注意:如果只想要对象本身的属性还是和for循环、hasOwnProperty一起使用。
深拷贝方法
未知深度:
-
递归
-
JSON对象
//无法实现对象中方法的深拷贝
function deepClone2(obj) {
let _obj = JSON.stringify(obj);
return JSON.parse(_obj);
}