Open xinchanghao opened 4 years ago
浅拷贝之所以被称为浅拷贝,是因为对象只会被克隆最外部的一层,至于更深层的对象,则依然是通过引用指向同一块堆内存。浅拷贝可以使用 Object.assign 和展开运算符来实现。
// 浅克隆函数
function shallowClone(o) { const obj = {}; for ( let i in o) { obj[i] = o[i]; } return obj; }
深拷贝相对浅拷贝而言,如果遇到属性值为引用类型的时候,它新建一个引用类型并将对应的值复制给它,因此对象获得的一个新的引用类型而不是一个原有类型的引用。
深拷贝对于一些对象可以使用 JSON 的两个函数来实现,但是由于 JSON 的对象格式比 js 的对象格式更加严格,所以如果属性值里边出现函数或者RegExp、Sympol等是特殊类型的值时,会转换失败。而且会抛弃对象的constructor,所有的构造函数会指向Object。参考
浅拷贝之所以被称为浅拷贝,是因为对象只会被克隆最外部的一层,至于更深层的对象,则依然是通过引用指向同一块堆内存。浅拷贝可以使用 Object.assign 和展开运算符来实现。
// 浅克隆函数
深拷贝相对浅拷贝而言,如果遇到属性值为引用类型的时候,它新建一个引用类型并将对应的值复制给它,因此对象获得的一个新的引用类型而不是一个原有类型的引用。
深拷贝对于一些对象可以使用 JSON 的两个函数来实现,但是由于 JSON 的对象格式比 js 的对象格式更加严格,所以如果属性值里边出现函数或者RegExp、Sympol等是特殊类型的值时,会转换失败。而且会抛弃对象的constructor,所有的构造函数会指向Object。参考