ES6全部特性

声明
  • var
  • let
  • const
  • function
  • class
  • improt
作用域
  • 全局作用域
  • 函数作用域function(){}
  • 块级作用域{}
作用范围
  • var命令 在全局代码中执行
  • const 和 let命令 只能在代码块中执行
赋值使用
  • const 声明常量后必须立马赋值
  • let命令可立马赋值或者使用时赋值
重点难点
  • 不允许重复声明
  • 未定义就使用报错:const 和 let 不存在变量提升
  • 暂时性死区:在代码块内使用 const 和 let 命令,声明变量之前,该变量都不可用
解构赋值
  • 字符串解构: const[a,b,c,d,e] = “hello”

  • 数值解构:const{ toString: s } = 123

  • 布尔解构: const{ toString: b } = true

  • 对象解构

  • 形式:const { x, y } = { x: 1, y: 2 }

  • 默认:const { x, y = 2 } = { x: 1 }

  • 改名:const { x, y: z } = { x: 1, y: 2 }

  • 数组解构

  • 规则:数据结构具有Iterator接口可采用数组形式的解构赋值

  • 形式:const [x, y] = [1, 2]

  • 默认:const [x, y = 2] = [1]

  • 函数参数解构

  • 数组解构:function Func([x = 0, y = 1]) {}

  • 对象解构:function Func({ x = 0, y = 1 } = {}) {}

字符串扩展
  • Unicode表示法:大括号包含表示Unicode字符(\u{0xXX}或\u{0XXX})
  • 字符串遍历:可通过for-of遍历字符串
  • 字符串模板:可单行可多行可插入变量的增强版字符串
  • 标签模板:函数参数的特殊调用
  • String.raw():返回把字符串所有变量替换且对斜杠进行转义的结果
  • String.fromCodePoint():返回码点对应字符
  • codePointAt():返回字符对应码点(String.fromCodePoint()的逆操作)
  • normalize():把字符的不同表示方法统一为同样形式,返回新字符串(Unicode正规化)
  • repeat():把字符串重复n次,返回新字符串
  • matchAll():返回正则表达式在字符串的所有匹配
  • includes():是否存在指定字符串
  • startsWith():是否存在字符串头部指定字符串
  • endsWith():是否存在字符串尾部指定字符串
克隆数组:
  • const arr = […arr1]
  • 合并数组:const arr = […arr1, …arr2]
  • 拼接数组:arr.push(…arr1)
  • 代替apply:Math.max.apply(null, [x, y]) => Math.max(…[x, y])
  • 转换字符串为数组:[…“hello”]
  • 转换类数组对象为数组:[…Arguments, …NodeList]
  • 转换可遍历对象为数组:[…String, …Set, …Map, …Generator]
  • 与数组解构赋值结合:const [x, …rest/spread] = [1, 2, 3]
  • 计算Unicode字符长度:Array.from(“hello”).length => […“hello”].length
箭头函数(=>):函数简写
  • 无参数:() => {}
  • 单个参数:x => {}
  • 多个参数:(x, y) => {}
  • 解构参数:({x, y}) => {}
  • 嵌套使用:部署管道机制
  • this指向固定化
  • 并非因为内部有绑定this的机制,而是根本没有自己的this,导致内部的this就是外层代码块的this
    因为没有this,因此不能用作构造函数
Set
  • 去重字符串:[…new Set(str)].join(“”)
  • 去重数组:[…new Set(arr)]或Array.from(new Set(arr))
  • 集合数组
  • 声明:const a = new Set(arr1)、const b = new Set(arr2)
  • 并集:new Set([…a, …b])
  • 交集:new Set([…a].filter(v => b.has(v)))
  • 差集:new Set([…a].filter(v => !b.has(v)))
  • 映射集合
  • 声明:let set = new Set(arr)
  • 映射:set = new Set([…set].map(v => v * 2))或set = new Set(Array.from(set, v => v * 2))
Promise
  • 定义:包含异步操作结果的对象
    状态

  • 进行中:pending

  • 已成功:resolved

  • 已失败:rejected

  • 特点

  • 对象的状态不受外界影响,一旦状态改变就不会再变,任何时候都可得到这个结果

  • 声明:new Promise((resolve, reject) => {})

  • 出参
    resolve:将状态从未完成变为成功,在异步操作成功时调用,并将异步操作的结果作为参数传递出去
    reject:将状态从未完成变为失败,在异步操作失败时调用,并将异步操作的错误作为参数传递出去

  • 方法
    then():分别指定resolved状态和rejected状态的回调函数

  • 第一参数:状态变为resolved时调用

  • 第二参数:状态变为rejected时调用(可选)

  • catch():指定发生错误时的回调函数

  • Promise.all():将多个实例包装成一个新实例,返回全部实例状态变更后的结果数组(齐变更再返回)

  • 入参:具有Iterator接口的数据结构

  • 成功:只有全部实例状态变成fulfilled,最终状态才会变成fulfilled

  • 失败:其中一个实例状态变成rejected,最终状态就会变成rejected

  • Promise.race():将多个实例包装成一个新实例,返回全部实例状态优先变更后的结果(先变更先返回)

  • 入参:具有Iterator接口的数据结构

  • 成功失败:哪个实例率先改变状态就返回哪个实例的状态

  • Promise.resolve():将对象转为Promise对象(等价于new Promise(resolve => resolve()))

  • Promise实例:原封不动地返回入参

  • Thenable对象:将此对象转为Promise对象并返回(Thenable为包- - 含then()的对象,执行then()相当于执行此对象的then())

  • 不具有then()的对象:将此对象转为Promise对象并返回,状态为resolved

  • 不带参数:返回Promise对象,状态为resolved

  • Promise.reject():将对象转为状态为rejected的Promise对象(等价于new Promise((resolve, reject) => reject()))

  • 应用场景

  • 加载图片

  • AJAX转Promise对象

  • 重点难点

  • 只有异步操作的结果可决定当前状态是哪一种,其他操作都无法改变这个状态

  • 状态改变只有两种可能:从pending变为resolved、从pending变为rejected

  • 一旦新建Promise对象就会立即执行,无法中途取消

  • 不设置回调函数,内部抛错不会反应到外部

  • 当处于pending时,无法得知目前进展到哪一个阶段

  • 实例状态变为resolved或rejected时,会触发then()绑定的回调函数

  • resolve()和reject()的执行总是晚于本轮循环的同步任务

  • then()返回新实例,其后可再调用另一个then()

  • then()运行中抛出错误会被catch()捕获

  • reject()的作用等同于抛出错误

  • 实例状态已变成resolved时,再抛出错误是无效的,不会被捕获,等于没有抛出

  • 实例状态的错误具有冒泡性质,会一直向后传递直到被捕获为止,错误总是会被下一个catch()捕获

  • 不要在then()里定义rejected状态的回调函数(不使用其第二参数)

  • 建议使用catch()捕获错误,不要使用then()第二个参数捕获

  • 没有使用catch()捕获错误,实例抛错不会传递到外层代码,即不会有任何反应

  • 作为参数的实例定义了catch(),一旦被rejected并不会触发Promise.all()的catch()

  • Promise.reject()的参数会原封不动地作为rejected的理由,变成后续方法的参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值