ES6的总结

106 阅读2分钟

ES6的特性

  1. 变量
  2. 函数
  3. 数组
  4. 字符串
  5. 面向对象
  6. Promise
  7. generator
  8. 模块化

变量

var

  • 可以重复声明
  • 无法限制修改
  • 没有块级作用域 函数级

let

  • 不能重复声明
  • 变量 可以修改
  • 有块级作用域

const

  • 不能重复声明
  • 常量 不可以修改
  • 有块级作用域

函数

剪头函数

  • 如果只一个参数,() 可以省略
  • 如果只有一个return ,{} 可以省略

函数的参数

  • 参数的展开/扩展
    • 收集剩余的参数 ...args ( Rest Parameter 必须是最后一个)
      function show(a, b, ...args) {}
      
  • 默认参数

解构赋值

  • 左右两边结构必须一样
  • 右边必须是个东西
  • 声明和赋值不能分开(必须在一句话里完成)
    let [a, b, c] = [1, 2, 3]
    let {q, w, r} = {q: 23, w: 34, r: 45}
    

数组

  • map 映射
    let arr = [1, 3, 4, 5]
        let result = arr.map(function (item) {
            return item
        })
        console.log( result ) //[1, 3, 4, 5]
    
  • reduce 汇总
    let arr = [ 45, 65, 76, 345, 676 ]
        let result = arr.reduce( function (tmp, item, index) {
            // console.log(tmp, item, index)
            return tmp+item
    
        })
        console.log(result) //1207
    
  • filter 过滤器
        let arr = [ 445, 565, 23, 563, 46, 4 ]
            let result = arr.filter (item => {
                return item%4 == 0
            })
            console.log(result) // [4]
    
  • forEach 循环(迭代)
        let arr = [23, 45, 65, 90]
        arr.forEach(item => {
            console.log(item) // 23, 45, 65, 90
        })
    

字符串

多两个新方法

  • startsWith 以什么开头
  • endsWith 以什么结尾

字符串模版

面向对象

  • class关键字、构造器和类分开了
  • class 里面直接加方法
    class User{
        constructor(name, pass) {
            this.name = name
            this.pass = pass
        }
        showName () {
            console.log(this.name)
        }
        showPass () {
            console.log(this.pass)
        }
    }
    var u1 = new User('Li Miss', '123')
    u1.showName()
    u1.showPass()
  • 继承:
    class User{
        constructor(name, pass) {
            this.name = name
            this.pass = pass
        }
        showName () {
            console.log(this.name)
        }
        showPass () {
            console.log(this.pass)
        }
    }

    class VipUser extends User{
        constructor(name, pass, level) {
            super(name, pass)
            this.level = level
        }
        showLevel() {
            console.log(this.level)
        }
    }

    var user4 = new VipUser('Zhang Miss', '345', 89)
    user4.showName()
    user4.showPass()
    user4.showLevel()
  • 面向对象应用 — react
    1. 组件化 — calss
    2. JSX
  • json
    • JSON.stringify
    • JSON.parse

Promise

  • 异步:操作之间没关系,同时进行多个操作
  • 同步:同时只能做一件事
  1. Promise.all
  2. Promise.race
    Promise.all([
        $.ajax({url: 'data/arr.txt', dataType: 'json'}),
        $.ajax({url: 'data/json.txt', dataType: 'json'}),
        $.ajax({url: 'data/num.txt', dataType: 'json'})
        ]),then(result => {
            let [arr, json, num ] = result // 解构赋值
            console.log('成功了')
        },
        err => {
            alert('失败了')
        }
    )

generator

  • 普通函数 - 一路到底
  • generator - 可以暂停
    function * show (){
            console.log('1')
            yield
            console.log('2')
        }
        // show() // 不会执行里面的代码,是创建一个 generator对象
        let genObj = show()
        genObj.next() // next执行下一步 1
        genObj.next() // 2
    }

yield

  • 传参
    function * show (num1, num2 ) {
        // console.log(num1, num2) // 23 45
        console.log('1')
        let a = yield
        console.log('2')
        console.log(a)
    }
    let gen = show(23, 45)
    gen.next(12) // 1  没法将参数 12 传给 yield
    gen.next(34) // 2 34
  • 返回
    function * show () {
        console.log('1')
        yield 'a'
        console.log('2')
        return
    }
    let gen = show()
    let bz1 = gen.next()
    let bz2 = gen.next()
    console.log(bz1) // 1 {value: "a", done: false}
    console.log(bz2) // 2 {value: undefined, done: true}

异步操作

  • 回调
  • promise
  • generator