let与块级作用域

  • 解决for循环计数器重名问题
  • for存在两个作用域:外层作用域()、内层作用域{}
  • 不存在变量声明的提升

const 常量/恒量

  • 初始化时需注意赋值,声明后再赋值会报错
  • 定义引用类型的,引用地址不能改,但是属性值可以更改
  • 不用var,主用 const,配合let

数组的解构

  • 提取数组中的值,const [,,baz] = arr
  • 三点运算符,解构末尾出现。const [baz,…rest] = arr
  • 可设置默认值

对象的解构

  • 根据属性名
  • 可设置提取后变量名称、设置默认值。
  • const { log } = console

模板字符串

  • 支持换行
  • 通过插值表达式,能嵌入变量或语句
  • 标签模板字符串

字符串的扩展方法

  • includes()
  • startswith()
  • endswith()

函数参数默认值

剩余参数

  • 只能出现在形参的最后一位
  • 展开数组

箭头函数

  • 简短易读
  • this 和外面作用域指向相同

对象字面量增强

  • bar:bar 等同于 bar
  • max: function () {} 等同于 max(){}
  • 计算属性名 [2+2]:45

对象扩展方法

  • Object.assign
    • 将多源对象中的属性复制到一个目标对象中
    • 同名属性会覆盖
    • 函数内修改应用型对象,可复制成新对象
  • Object.is

Proxy

  • Object.defineProperty
    • 只能监听对象的读写
  • new Proxy({},{ get(target ,property ){},set(target ,property,value){} })
  • Proxy能监听到更多对象操作
  • 更好的支持数组对象的监听

Reflect

  • 统一对象操作API
  • Reflect.get()
  • 内部封装了一系列对对象的底层操作
  • Reflect成员方法就是Proxy处理对象的默认实现(13个方法)

Promise

  • 解决了传统异步编程中回调函数嵌套过深的问题

Class

  • 实例方法 vs 静态方法 static
  • 类的继承 extends
    • 子类通过super调用父类的属性和方法

Set数据结构

集合

  • add()、has(),delete(),clear()
  • 数组去重
  • Aarry.from ,…

Map数据结构

  • 解决键类型的问题,任意对象都能作为键
  • set(),get(),delete(),clear(),forEach

Symbol

  • 可作为属性名
  • 私有成员变量
  • 唯一性Symbol.for(字符串)
  • 内置Symbol常量
  • Object.getOwnPropertySymbol()

for … of 循环

  • break 能跳出循环
  • 可遍历所有类型的对象(含迭代器)
  • 可迭代接口 Iterable
    ES新特性笔记 - 图1

迭代器模式

  • 统一对外迭代接口

生成器函数

  1. - *星号 yeild
  2. - 应用场景
  3. - 发号器

ES Modules

ES2016概述

  • 2016年6月
  • index.of 查找不了 NAN ,includes可以
  • 指数运算符 2 ** 10,2的10次方

ES2017概述