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));//trueconsole.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:100console.log(obj);//Object age: 12 name: "we"