ECMAScript 6入门 互动版

简介
什么是ES6? 支持 环境支持
变量与字符串
let let应用 const声明常量 是否包含字符串三种新方法 repeat()原字符串重复 模板字符串 标签模板 String.raw()
数值
值是否无穷,NaN 值是否整数 Math对象 Math 对数方法
数组
Array.from() Array.of() 数组实例的find()和findIndex() 数组实例的fill() 数组实例的entries(),keys()和values()
对象
属性的简洁表示法 属性名表达式 比较两个值是否严格相等 Object.assign() proto属性 Symbol类型 Proxy内置代理
函数
默认参数 rest参数 扩展运算符 箭头函数 函数绑定 尾调用优化
Set
基本用法 Set实例的属性 Set实例的方法 遍历操作 WeakSet
Map
Map结构的目的和基本用法 实例的属性和操作方法 遍历方法 WeakMap
Iterator(遍历器)和for..of
Iterator(遍历器)的概念 数据结构的默认Iterator接口 调用默认Iterator接口的场合 原生具备Iterator接口的数据结构 Iterator接口与Generator函数 遍历器的return(),throw() for...of循环
Generator
简介 next方法的参数 for...of循环 throw方法 yield*语句 作为对象属性的Generator函数
Promise
Promise的含义 基本用法 Promise实例添加状态改变时的回调函数 指定发生错误时的回调函数 Promise.all()方法 Promise.race()方法 Promise.resolve()方法 Promise.reject()方法 Generator函数与Promise的结合 async函数
Class
Class基本语法 Class的继承 class的取值函数(getter)和存值函数(setter) Class的Generator方法 Class的静态方法 new.target属性 修饰器-类的修饰1 修饰器-类的修饰2
Module
export命令 import命令 模块的整体输入 module命令 export default命令 模块的继承
在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

yield*语句

  如果yield命令后面跟的是一个遍历器,需要在yield命令后面加上星号,表明它返回的是一个遍历器。这被称为yield*语句。

  其实yield关键字就是以一种更直观、便捷的方式让我们创建用于遍历有限序列集合的迭代器,而yield则用于将生成器函数的代码切片作为有限序列集合的元素(元素的类型为指令+数据,而不仅仅是数据而已)。下面我们一起看看yield关键字是怎样对代码切片的吧!

// 定义生成器函数
function *enumerable(msg){
  document.write(msg)
  var msg1 = yield msg + '  after '
  document.write(msg1)
  var msg2 = yield msg1 + ' after'
  document.write(msg2 + ' over')
}

上述代码最终会被解析为下面的代码:

var enumerable = function(msg){
  var state = -1

  return {
    next: function(val){
      switch(++state){
         case 0:
                  document.write(msg + ' after')
                  break
         case 1:
                  var msg1 = val
                  document.write(msg1 + ' after')
                  break
         case 2:
                  var msg2 = val
                  document.write(msg2 + ' over')
                  break
      }
    }
  }
}