js 对象克隆可以分为浅克隆和深克隆两种方式。
基本数据类型不管是浅克隆还是深克隆都是对值本身的克隆,对克隆后值的修改不会影响到原始值。
引用数据类型如果执行的是浅克隆,对克隆后值的修改会影响到原始值;如果执行的是深克隆,则克隆的对象和原始对象相互独立,不会彼此影响。
首先来说浅克隆
1.简单的引用复制
2.ES6新发布的Object.assign() 函数来实现浅克隆
js对象深克隆的有多种实现方法
1.JSON序列化和反序列化
当我们修改obj的键值对时不会影响result的键值对
但是这种方式的深克隆也有着一些缺陷
1.无法实现对函数、RegExp等特殊对象的克隆。
2.对象的constructor会被抛弃,所有的构造函数会指向Object,原型链关系断裂。
3.对象中如果存在循环引用,会抛出异常。