区分深复制和浅复制

复制有层次性,针对引用数据类型
深复制:从表面复制到原型,复制对象拥有控制自身属性而不影响别的被复制对象属性
浅复制:只复制表面,复制对象和被复制对象,任何一个修改都会影响对方

浅复制*:

  • 解构
var  objcopy=[...arr]
  • Object.assign()
var objcopy=Object.assign([],arr)
  • arr.slice()
var objcopy=arr.slice(0)
  • arr.contact()
var objcopy=[].contact(arr)
  • for循环遍历复制
for(var item of arr){
	objcopy[item]=arr[item];
}

深复制

  • 方法一:
var objcopy={
	__proto__:Object.getPropertyOf(obj);
	...obj
}
  • 方法二: Object.create(prop,[propertyValue])创建新的对象原型对象为现有对象
    prop:现有的对象,作为新建对象的__proto__属性
    propertyValue:新建对象的自身属性,默认不可枚举
var objcopy=Object.create(Object.getPropertyOf(obj),
	Object.getOwnPropertyDescriptors(obj)),
  • 方法三:使用Object.assign()将源对象的内容,复制大目标对象
var objcopy=Object.assign(Object.getProperty(obj),obj);
  • 方法四:序列化与反序列化
    JSON的格式需要注意
var objcopy=JSON.parse(JSON.stringify(obj))

// 交集

var set1= [1,2,3,4,56,7],set2=[3,4,56,7,8,9]
let s2=set1.filter(item=>{
	return set2.includes(item)
})
console.log(s2);

// 并集

let s3 =[...new Set(set1.concat(set2))]
console.log(s3)

// 差集 并集 -交集
let s4 = s3.filter(item=>{
	return !s2.includes(item)
})
console.log(s4)
在JavaScript中,拷贝和拷贝是两种不同的复制方式。 拷贝是对基本类型的值进行复制,对对象类型进行地址拷贝。当进行拷贝时,新变量与原变量将引用同一块内存空间。这意味着当原变量发生改变时,新变量也会随之改变。例如,当我们对一个对象进行拷贝时,修改新对象的属性也会影响到原对象的属性。 拷贝则是创建一个新的对象,并将原对象的属性逐个复制到新对象中。拷贝是完全独立的,不会受到原对象的改变而影响。当原对象发生改变时,新对象不会受到任何影响。 要区分拷贝和拷贝,可以通过对复制后的变量进行修改来观察原变量是否会跟着改变。如果修改后的变量影响到了原变量,说明这是拷贝;如果修改后的变量不会影响原变量,说明这是拷贝。 需要注意的是,当对象只有一级属性时,拷贝可以实现拷贝的效果。但当对象中有多级属性时,拷贝只能进行一级属性的复制,而二级属性及更层次的属性仍然是拷贝。 在JavaScript中,可以使用一些方法实现拷贝,如JSON.parse(JSON.stringify(obj))、递归复制等。而拷贝可以通过直接赋值、Object.assign()、slice()和concat()等方法来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [JavaScript中拷贝与拷贝的概念及区别](https://blog.csdn.net/Yannick_H/article/details/125361201)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [js拷贝与拷贝的区别和实现方式](https://blog.csdn.net/weixin_30388677/article/details/100091271)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值