ES6重点知识点总结

2021-02-23  本文已影响0人  alicemum

ES6最重要最复杂的知识点: 1. 类和继承 2.promise 3. ES6模块化(在vue中讲)

与深拷贝相关的知识点

  1. Object.assgin()方法: 可以实现第一层对象的深拷贝
  2. 简单粗暴的深拷贝
JSON.parse(JSON.stringify(obj))
  1. 完整的深拷贝: 参考网上资料

常见的数组方法

下面的方法都有回调函数,回调的两个形参分别为项目值和索引
除了forEach, 其它的方法都需要return

  1. arr.forEach()
  2. arr.map()
  3. arr.filter()
  4. arr.some()
  5. arr.every()
  6. arr.reduce()

let: 声明块级作用域

    let arr = []
    for (let i = 0; i < 6; i++){
        arr[i] = function(){
            console.log(i)
        }
    }
    arr[3]()

const: 声明常量

箭头函数

arr.forEach(()=>{})
setInterval(()=>{},1000)

let fun = ()=>{}
let fun = x => {}
let fun = (x,y) => {}
let fun = (x,y) => 3
let fun = (x,y) => ({
        name: 1,
        age: 2
    })

箭头函数的this指向

箭头函数自身没有this,它内部的this是定义箭头函数所在环境的this

        box.onclick = function(){
            // console.log(this);
            let i  = 0
            setInterval(()=>{
                this.innerHTML = i;  //this是box
                i++
            },1000)
        }

对象字面量的简写

    let color = 'red',
        age = 18;

    let obj = {
        color,
        age,
        run(){
            console.log('run')
        }
    }

类和继承

定义父类

class Animal {
    constructor(color){
        this.type = 'animal';
        this.eye = true;
        this.color = color;
    }
    sound(){
        console.log('sound')
    }
}

var ani = new Animal('red')

定义子类

class Cat extends Animal{
    constructor(nickname,age,color){
        super(color);
        this.nickname = nickname;
        this.age = age;
    }
    eat(){
        console.log('eat')
    }
}
var cat = new Cat('小猫咪',5,'white')
cat.sound()

模板字符串

    let color = 'red';
    let str = `this is ${color}`

解构赋值

    let obj = {
            title: 'aaaa',
            price: 300,
            discount: 200
        }

    let {title,price} = obj;

展开运算符

把数组中的值打散,一个一个罗列

        let arr = [34, 56, 78];

        function total(Ch, En, Math) {
            return Ch + En + Math;
        }
        let result = total(...arr)

        let divList = document.querySelectorAll("div");

        //伪数组可以调用 forEach,不能调用其它数组的遍历方法
        divList.forEach((el)=>{
            console.log(el);
        })

        var arr = [...divList].map((el)=>{
            return el.innerHTML
        })
        console.log(arr);

默认参数

        function draw(radius=100){
            console.log(radius);
        }
        draw(30)

        // 默认(default)参数必须设置在最后
        function draw(y,x=2,z=20){
            console.log(x,y,z);
        }

        draw(1)
        draw(1,3)

剩余参数

        function total(...args){
            console.log(args);
            console.log(args instanceof Array);  //true
        }
        total(23,45)

Symbol数据类型

获取唯一的不会重复的变量,是ES6新增的基本数据类型

        // Symbol的应用场景

        //第三方的库中定义了一个对象(对用户来讲是隐蔽的)

        let obj = {
            name: '23',
            count() {
                console.log('count');
            }
        }

        // 对对象的功能进行扩展:希望用一个一定不会和对象已有属性重复的属性名

        let count = Symbol();

        obj[count] = function(){
            console.log('数量');
        }

        obj.count()  // count
        obj[count]();  //数量

Set类型的数据

是ES6中新增的集合的数据类型,用来存放数组。但是,数组的元素不允许重复

数组去重

    var arr = [1,2,3,2,5,1]
    var result = [...new Set(arr)]
    console.log(result);

Set常用的API

        1. add
        2. delete
        3. has
        4. clear

for...of语句

    //作用于数组
    var arr = ['a','c','d']
        for(let i of arr){
            console.log(i);
        } 
//作用于元素节点NodeList
    let divList = document.querySelectorAll("div");
        for (let el of divList){
            console.log(el);
        }

Object的API

  1. Object.assign: 合并对象
  2. Object.keys(): 返回对象所有键组成的集合
        let obj = {
            name: 'Peppa',
            age: 4,
            sex: '女'
        }
        // ["name","age","sex"]
        console.log(Object.keys(obj));

Map类型的数据

类似于对象,用来存储键值对。

对象只能使用字符串作为属性名,而Map可以使用任意类型的数据做为属性名

//第一个键是"a",值是1, 第二个键是b,值是2
        var map1 = new Map([["a",1],["b",2]]);
        console.log(map1);

Map的API

        属性: size 
        方法: set , get , has, delete ,clear

for...of 遍历

    var map1 = new Map([["a", 1], ["b", 2]]);
        
        //只遍历键
        for (let key of map1.keys()){
            console.log(key);
        }

        // 只遍历值
        for (let val of map1.values()){
            console.log(val);
        }


        // val是数组,存储了每一个的键和值
        for (let val of map1){
            console.log(val[0]);
            console.log(val[1]);
        }

        //同时返回键值对
        for (let [key,value] of map1){
            console.log(key);
            console.log(value);
        }

        // 等价于上面的写法
        for (let [key,value] of map1.entries()){
            console.log(key);
            console.log(value);
        }

Promise:

上一篇 下一篇

猜你喜欢

热点阅读