Set
//set特点:不重复,不是一个有序列的集合
var arr = [1,2,3,1]
var s = new Set([...arr])//数组去重
s.add(4)//添加数据
s.clear()//清空数据
s.delete(2)//删除2 ------shift,pop,splice(index,howmany)
s.forEach((item)=>{})//遍历数组
console.log(s.has(3));//true
console.log(s.entries());//参赛作品 SetIterator {1 => 1, 3 => 3, 4 => 4}
深拷贝浅拷贝
//vue中常用
//应用:在复杂类型(Array,Object)的赋值运算
//浅拷贝:既传值也传址 (栈,堆)
var arr = [1,2,3];
var b = arr;
b.push(4);
console.log(arr);
//深拷贝:只传值
arr=[1,2,3]
b=[];
arr.forEach(item=>{
b.push(item)
})
console.log(b);//[1, 2, 3]
//或:
//var b=([...arr])
//var b = arr.slice(0,)
var arr = [{name:"we"},{name:"ni"},{name:"ta"}];
var res = [...arr]//浅拷贝
res[0].name = "huang";
console.log(arr);//[{name: "huang"},{name: "ni"},{name: "ta"}]
//接上
res.push({name:"zai"})
console.log(arr);//不变,res有zai,arr没有
Array,Object复杂类型的深拷贝
var arr = [{name:"we"},{name:"ni"},{name:"ta"}];
function deepClone(obj){
//1.识别是否为数组或对象
let result;
if(typeof obj == "number"||obj == null||typeof obj =="boolean"||typeof obj == "string"){
return obj;
}
if(obj instanceof Array || typeof obj == "object"){//instanceof:实例;typeof:类型
console.log(obj);
//2.对拷贝的值作初始值设定
if(obj instanceof Array){
result = [];
}else if(typeof obj == "object"){
result = {}
}
console.log(result);
//3.将obj克隆到result
for(let key in obj){
// result[key]=obj[key];
result[key]=deepClone(obj[key]);//递归
console.log(result);
}
return result;
}else{
return obj;
}
}
var res = deepClone(arr);
res[0].name="gai"
console.log(arr);//arr没变
assign
var obj = {
name:"we",
age:12
}
var a = Object.assign({},obj);//assign:分配
a.id = 100;
console.log(a);//Object age: 12 name: "we" id:100
console.log(obj);//Object age: 12 name: "we"