js浅拷贝和深拷贝的方法和坑

在线代码
在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 (
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值