ES6(2)

93 阅读2分钟

set集合

set的基本操作

let s1 = new Set();
let s2 = new Set(['喜羊羊','美羊羊','懒洋洋','沸羊羊']);
​
console.log(typeof s1)//object对象
console.log(s2) //{'喜羊羊', '美羊羊', '懒洋洋', '沸羊羊'}
s2.add('灰太狼')
console.log(s2) //{'喜羊羊', '美羊羊', '懒洋洋', '沸羊羊', '灰太狼'}
s2.delete('沸羊羊')
console.log(s2) //{'喜羊羊', '美羊羊', '懒洋洋', '灰太狼'}
​
console.log(s2.has('灰太狼')) // true
console.log(s2.size) // 4
s2.clear();
console.log(s2) //Set(0) {size: 0}

set集合会自动去重,假如你的set集合中为 let s2 = new Set(['喜羊羊',['喜羊羊']) 当你打印s2的时候集合中只会出现一个‘喜羊羊’,并且set集合的大小也为1。

求两个数组交集

let arr1 = [1,2,3,4,5,4,3,6,9];
let arr2 = [5,3,4,8,3,4,7];

写法一:

let result1 = [...new Set(arr1)].filter(item => {
    let s2 = new Set(arr2)
    if (s2.has(item)){
        return true;
    }else {
        return false;
    }
})
console.log(result1)

写法二

let result2 = [...new Set(arr1)].filter(item => new Set(arr2).has(item));
console.log(result2)

[...new Set(arr1)]是为了将数组去重,再用filter方法判断去重过后的arr2中是否有arr1中有的数字,有就返回,返回的数会保存再result1中。

Map

let m = new Map()
​
m.set('location','羊村');
m.set('chi',function eat() {
  console.log('烤全羊')
})
​
let key = {
  who:'懒洋洋'
}
m.set(key,['羊肉串','清蒸羊肉','羊肉汤'])
​
console.log(m) // {'location' => '羊村', 'chi' => ƒ, {…} => Array(3)}
console.log(m.size) // 3
m.delete('location')
console.log(m) // {'chi' => ƒ, {…} => Array(3)}
console.log(m.get('todo')) // ['chi', ƒ]for(let v of m){
  console.log(v) //[{…}, Array(3)]
}
m.clear(); // 清空集合 返回undefined

Map是键值对的集合,但是各种类型的值,甚至是对象都可以当作键。同时它也实现了iterator接口,可以使用扩展运算符和for of遍历。

Class类

class phone{
  constructor(brand,price) {
    this.brand = brand;
    this.price = price;
  }
  call(){
    console.log('我可以打电话!!')
  }
}
const vivo = new phone('iqoo7',3199);
console.log(vivo) //{brand: 'iqoo7', price: 3199}

call()方法在phone内部

继承

class phone {
  constructor(brand,price) {
    this.brand = brand;
    this.price = price;
  }
  call(){
    console.log('我可以打电话!!')
  }
}
​
class smartPhone extends phone{
  constructor(brand,price,color,size) {
    super(brand,price);
    this.color = color;
    this.size = size;
  }
  game(){
    console.log('我可以畅玩各种游戏!!')
  }
  photo(){
    console.log('我的拍照功能很好!!')
  }
  music(){
    console.log('我的音质很棒!!')
  }
}
​
const vivo = new smartPhone('iqoo7',3199,'远峰蓝','300inch')
console.log(vivo)

输出结果:

Snipaste_2022-11-22_11-21-41.png

重写

重写只需要在子类方法中将父类有的方法重新写一下即可。

如图,父类方法中有call方法,我们只需在子类中重写即可。

call(){
    console.log('我可以视频通话!!')
  }

Getter和Setter

class phone{
  get price(){
    console.log('价格被读取了')
  }
  set price(value){
    console.log('价格被修改了')
  }
}
​
const p = new phone();
p.price = 'free';
//价格被修改了

模块化方式

优点:

  • 防止命名冲突
  • 代码复用
  • 高维护性

两个命令功能:export,import。

通用方式暴露

第一种暴露及引用方式

//m1.js
export const name = '光头强'export function tree(){
    console.log('光头强又来砍树了');
} 
//index.html
<script type="module">
    import * as m1 from "./m1.js";
​
    console.log(m1);
</script>

第二种暴露方式

const name = '电击小子'function hit() {
    console.log('火星大力拳')
}
​
export {name,hit}

第三种暴露方式

export default {
    name:'超智能足球',
    shoot:function (){
        console.log('战车铲球')
    }
}

解构赋值形式

<script type="module">
    import {name,tree} from "./m1.js"
    console.log(name);
    console.log(tree);
</script>

简便形式,针对默认暴露(最常用)

<script>
    import m3 from "./m3";
    console.log(m3);
</script>

把所有方式打包到一个包里

//app.js
import * as m1 from './m1.js'
import * as m2 from  './m2.js'
import * as m3 from  './m3.js'console.log(m1)
console.log(m2)
console.log(m3)
//index.html
<script src="app.js" type="module">
   
</script>