Set

  1. //set特点:不重复,不是一个有序列的集合
  2. var arr = [1,2,3,1]
  3. var s = new Set([...arr])//数组去重
  4. s.add(4)//添加数据
  5. s.clear()//清空数据
  6. s.delete(2)//删除2 ------shift,pop,splice(index,howmany)
  7. s.forEach((item)=>{})//遍历数组
  8. console.log(s.has(3));//true
  9. console.log(s.entries());//参赛作品 SetIterator {1 => 1, 3 => 3, 4 => 4}

深拷贝浅拷贝

  1. //vue中常用
  2. //应用:在复杂类型(Array,Object)的赋值运算
  3. //浅拷贝:既传值也传址 (栈,堆)
  4. var arr = [1,2,3];
  5. var b = arr;
  6. b.push(4);
  7. console.log(arr);
  8. //深拷贝:只传值
  9. arr=[1,2,3]
  10. b=[];
  11. arr.forEach(item=>{
  12. b.push(item)
  13. })
  14. console.log(b);//[1, 2, 3]
  15. //或:
  16. //var b=([...arr])
  17. //var b = arr.slice(0,)
  1. var arr = [{name:"we"},{name:"ni"},{name:"ta"}];
  2. var res = [...arr]//浅拷贝
  3. res[0].name = "huang";
  4. console.log(arr);//[{name: "huang"},{name: "ni"},{name: "ta"}]
  1. //接上
  2. res.push({name:"zai"})
  3. console.log(arr);//不变,res有zai,arr没有

Array,Object复杂类型的深拷贝

  1. var arr = [{name:"we"},{name:"ni"},{name:"ta"}];
  2. function deepClone(obj){
  3. //1.识别是否为数组或对象
  4. let result;
  5. if(typeof obj == "number"||obj == null||typeof obj =="boolean"||typeof obj == "string"){
  6. return obj;
  7. }
  8. if(obj instanceof Array || typeof obj == "object"){//instanceof:实例;typeof:类型
  9. console.log(obj);
  10. //2.对拷贝的值作初始值设定
  11. if(obj instanceof Array){
  12. result = [];
  13. }else if(typeof obj == "object"){
  14. result = {}
  15. }
  16. console.log(result);
  17. //3.将obj克隆到result
  18. for(let key in obj){
  19. // result[key]=obj[key];
  20. result[key]=deepClone(obj[key]);//递归
  21. console.log(result);
  22. }
  23. return result;
  24. }else{
  25. return obj;
  26. }
  27. }
  28. var res = deepClone(arr);
  29. res[0].name="gai"
  30. console.log(arr);//arr没变

assign

  1. var obj = {
  2. name:"we",
  3. age:12
  4. }
  5. var a = Object.assign({},obj);//assign:分配
  6. a.id = 100;
  7. console.log(a);//Object age: 12 name: "we" id:100
  8. console.log(obj);//Object age: 12 name: "we"