在线代码
在c语言中有指针这个概念,浅拷贝的概念有点类似于引用指针。
对于普通的Boolean、String和Number不是通过new关键字产生的来说,深拷贝和浅拷贝没有区别。
const shallowCopyStrNumBool = (origin) => {
return origin;
}
const deepCopyStrNumBool = (origin) => {
if (!origin) return origin;
if ((typeof origin ) === 'string' || (typeof origin ) === 'number' || (typeof origin ) === 'boolean') {
return origin;
}
if (origin instanceof String) return new String(origin.toString())
if (origin instanceof Number) return new Number(origin.valueOf())
if (origin instanceof Number) return new Boolean(origin.valueOf())
}
对于Object类型,可以通过复制它的key-value来进行深拷贝,但是如果key的类型是Symbol,不会出现在for…in和Object.keys里面;对于Array类型可以主意复制它的元素来进行深拷贝;对于Symbol和Function来说,无法进行深拷贝。对于JSON.parse(JSON.stringify(obj))来说,JSON.stringify会忽略值为undefined、Symbol、Function的key,以及为Symbol的key。另外,对于使用new创建的String和Number来说,它们可以像普通的Object一样添加新的key,这时候如果遍历它们,会发现出现一些是数字的key,如果像深拷贝普通Object一样拷贝key-value,会变得跟原来对象结构不一样。
const shallowCopyObject = (origin) => {
return {
...origin }
}
const deepCopyObject = (origin) => {
if (