ES6新增数据类型:

Symbol 使用情况一般

用 typeof 检测出来的类型是: symbol

注意:

1.Symbol不能new出来
2.Symbol()返回的是一个唯一的值

使用可以做一个key,定义一些唯一或者私有的一些东西
3.symbol 是一个单独的数据类型,就叫symbol,属于基本数据类型
4.如果symbol作为key,用 for in 循环,出不来

Symbol的定义和使用

<script > let syml = Symbol('aaa'); console.log(syml); console.log(typeof syml); </script>

Symbol可用于json中:

<script > let symbol = Symbol('kirin'); let json = {
     a: 'apple', b: 'banana', [symbol]: 'aaa' }; console.log(json['a']); console.log(json[symbol]); console.log("split---"); for (let item in json) {
     console.log(item); } </script>

箭头函数:

<script > ()=>{
     } </script>

generator 函数:生成器

是为了解决异步深度嵌套的问题

generator函数语法:

<script > function * show() {
     //只能配合generator函数来使用 yield } //如: function* gen() {
     yield 'welcome'; yield 'to'; yield 'school';+ } </script>
  • 调用:
<script > function* gen() {
      yield 'welcome'; yield 'to'; return 'school';- } let g1 = gen(); console.log(g1.next()); // {value: "welcome", done: false} value:值 , done:后面是否为空 console.log(g1.next()); console.log(g1.next());// 此时返回的是最后一个,done:true </script>

上述调用为手动调用

  • for…of…自动便利generator,但是不会遍历到generator,如:
<script > function* gen() {
      yield 'welcome'; yield 'to'; return 'school'; } let g1 = gen(); for (let val of g1) {
      // 此时不会输出return的东西 console.log(val); } </script>

还可以使用解构赋值(它解构并不会解构return的东西),如:

<script > function* gen() {
     yield 'welcome'; yield 'to'; return 'school'; } let [a, b] = gen(); console.log(a, b); </script>

或者配合解构:

<script > function* gen() {
     yield 'welcome'; yield 'to'; yield '51.cnm'; return 'school'; } let [a, ...b] = gen(); console.log(a, b); </script>

或者使用扩展运算符:

<script > function* gen() {
     yield 'welcome'; yield 'to'; yield '51.cnm'; return 'school'; } console.log(...gen()); </script>

也可以配合Array.from()来使用:

<script > function* gen() {
     yield 'welcome'; yield 'to'; yield '51.cnm'; return 'school'; } console.log(Array.from(gen())); </script>

异步:不连续,上一个操作没有执行完,下一个操作照样开始

同步:连续执行,上一个操作没有执行完,下一个没法开始

关于异步的解决方案:

回调函数

事件监听

发布/订阅

Promise对象


<script > async function fn() {
     let result=await xxx; //表示后面结果需要等待 } </script>

补充:async特点:

1.await只能放到async函数

2.相比generator语义化更强了

3.await后面可以是promise对象,也可以是数字,字符串等等

4.async返回的是promise对象

5.只要await语句后面promise状态变成一个reject时,整个async函数就会中断执行,如:

<script > async function fn() {
      throw new Error('Error出错了'); } fn().then(res=>{
      console.log(res)},err=>{
      console.log(err);}) </script>

async函数中解决抛错:影响后续代码:使用try{}catch(){}
推荐在任何有await的地方,都用try,catch