任逍遥

 找回密码
 立即注册
查看: 30835|回复: 100

ECMAScript 2017(ES8)新特性尝鲜

    [复制链接]
  • TA的每日心情
    慵懒
    2021-11-26 16:44
  • 签到天数: 488 天

    连续签到: 1 天

    [LV.9]妙领天机

    488

    主题

    3347

    帖子

    4458

    积分

    如雷贯耳

    Rank: 8Rank: 8

    积分
    4458
    发表于 2018-7-23 19:32:06 | 显示全部楼层 |阅读模式

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x

      ECMAScript 2017 或 ES8 与 2017 年六月底由 TC39 正式发布,可以在这里浏览完整的版本;而 ES8 中代表性的特征包括了字符串填充、对象值遍历、对象的属性描述符获取、 函数参数列表与调用中的尾部逗号、异步函数、共享内存与原子操作等。

      字符串填充:
      ES8 中添加了内置的字符串填充函数,分别为 padStart 与 padEnd,该函数能够通过填充字符串的首部或者尾部来保证字符串达到固定的长度;开发者可以指定填充的字符串或者使用默认的空格,函数的声明如下:
      str.padStart(targetLength [, padString])
      str.padEnd(targetLength [, padString])
      如上所示,函数的首个参数为目标长度,即最终生成的字符串长度;第二个参数即是指定的填充字符串:
      'es8'.padStart(2);          // 'es8'
      'es8'.padStart(5);          // '  es8'
      'es8'.padStart(6, 'woof');  // 'wooes8'
      'es8'.padStart(14, 'wow');  // 'wowwowwowwoes8'
      'es8'.padStart(7, '0');     // '0000es8'
      'es8'.padEnd(2);          // 'es8'
      'es8'.padEnd(5);          // 'es8  '
      'es8'.padEnd(6, 'woof');  // 'es8woo'
      'es8'.padEnd(14, 'wow');  // 'es8wowwowwowwo'
      'es8'.padEnd(7, '6');     // 'es86666'
      对象指遍历
      Object.values 函数会返回指定对象的可枚举的属性值数组,数组中值顺序与 for-in 循环保持一致,函数的声明为:
      Object.values(obj)
      首个参数 obj 即为需要遍历的目标对象,它可以为某个对象或者数组(数组可以看做键为下标的对象):
      const obj = { x: 'xxx', y: 1 };
      Object.values(obj); // ['xxx', 1]
      const obj = ['e', 's', '8']; // same as { 0: 'e', 1: 's', 2: '8' };
      Object.values(obj); // ['e', 's', '8']
      // when we use numeric keys, the values returned in a numerical
      // order according to the keys
      const obj = { 10: 'xxx', 1: 'yyy', 3: 'zzz' };
      Object.values(obj); // ['yyy', 'zzz', 'xxx']
      Object.values('es8'); // ['e', 's', '8']
      而 Object.entries 方法则会将某个对象的可枚举属性与值按照二维数组的方式返回,数组中顺序与 Object.values 保持一致,该函数的声明与使用为:
      const obj = { x: 'xxx', y: 1 };
      Object.entries(obj); // [['x', 'xxx'], ['y', 1]]
      const obj = ['e', 's', '8'];
      Object.entries(obj); // [['0', 'e'], ['1', 's'], ['2', '8']]
      const obj = { 10: 'xxx', 1: 'yyy', 3: 'zzz' };
      Object.entries(obj); // [['1', 'yyy'], ['3', 'zzz'], ['10': 'xxx']]
      Object.entries('es8'); // [['0', 'e'], ['1', 's'], ['2', '8']]
      对象的属性描述符获取
      getOwnPropertyDescriptors 函数会返回指定对象的某个指定属性的描述符;该属性必须是对象自己定义而不是继承自原型链,函数的声明为:
      Object.getOwnPropertyDescriptor(obj, prop)
      obj 即为源对象,而 prop 即为需要查看的属性名;结果中包含的键可能有 configurable、enumerable、writable、get、set 以及 value。
      const obj = { get es8() { return 888; } };
      Object.getOwnPropertyDescriptor(obj, 'es8');
      // {
      //   configurable: true,
      //   enumerable: true,
      //   get: function es8(){}, //the getter function
      //   set: undefined
      // }
      函数参数列表与调用中的尾部逗号
      该特性允许我们在定义或者调用函数时添加尾部逗号而不报错:
      function es8(var1, var2, var3,) {
      // ...
      }
      es8(10, 20, 30,);
      异步方法
      ES8 中允许使用 async/await 语法来定义与执行异步函数,async 关键字会返回某个 AsyncFunction 对象;在内部实现中虽然异步函数与迭代器的实现原理类似,但是其并不会被转化为迭代器函数:
      function fetchTextByPromise() {
      return new Promise(resolve => {
      setTimeout(() => {
      resolve("es8");
      }, 2000);
      });
      }
      async function sayHello() {
      const externalFetchedText = await fetchTextByPromise();
      console.log(`Hello, ${externalFetchedText}`); // Hello, es8
      }
      sayHello();
      console.log(1);
      sayHello();
      console.log(2);
      // 调用结果
      1 // immediately
      2 // immediately
      Hello, es8 // after 2 seconds
      共享内存与原子操作:
      共享内存允许多个线程并发读写数据,而原子操作则能够进行并发控制,确保多个存在竞争关系的线程顺序执行。本部分则介绍了新的构造器 SharedArrayBuffer 与包含静态方法的命名空间对象 Atomics。Atomic 对象类似于 Math,我们无法直接创建其实例,而只能使用其提供的静态方法:
      add /sub - 增加或者减去某个位置的某个值
      and / or /xor - 进行位操作
      load - 获取值
    楼主热帖
  • TA的每日心情

    2019-8-30 15:07
  • 签到天数: 470 天

    连续签到: 1 天

    [LV.9]妙领天机

    2

    主题

    2878

    帖子

    2881

    积分

    声名显赫

    Rank: 7Rank: 7Rank: 7

    积分
    2881
    发表于 2018-7-23 20:02:57 | 显示全部楼层
    好,很好,非常好!
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-8-29 20:08
  • 签到天数: 471 天

    连续签到: 8 天

    [LV.9]妙领天机

    4

    主题

    2966

    帖子

    2967

    积分

    声名显赫

    Rank: 7Rank: 7Rank: 7

    积分
    2967
    发表于 2018-7-25 02:29:15 | 显示全部楼层
    支持支持再支持
    回复

    使用道具 举报

  • TA的每日心情
    难过
    2019-8-27 05:09
  • 签到天数: 459 天

    连续签到: 2 天

    [LV.9]妙领天机

    0

    主题

    2998

    帖子

    2993

    积分

    声名显赫

    Rank: 7Rank: 7Rank: 7

    积分
    2993
    发表于 2018-7-26 06:59:17 | 显示全部楼层
    看起来好像不错的样子
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-8-30 09:06
  • 签到天数: 474 天

    连续签到: 3 天

    [LV.9]妙领天机

    3

    主题

    2942

    帖子

    2937

    积分

    声名显赫

    Rank: 7Rank: 7Rank: 7

    积分
    2937
    发表于 2018-7-26 17:40:10 | 显示全部楼层
    好,很好,非常好!
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2019-8-30 08:32
  • 签到天数: 481 天

    连续签到: 2 天

    [LV.9]妙领天机

    1

    主题

    2952

    帖子

    2952

    积分

    声名显赫

    Rank: 7Rank: 7Rank: 7

    积分
    2952
    发表于 2018-7-27 02:59:00 | 显示全部楼层
    LZ是天才,坚定完毕
    回复

    使用道具 举报

  • TA的每日心情

    2019-8-30 07:31
  • 签到天数: 466 天

    连续签到: 5 天

    [LV.9]妙领天机

    7

    主题

    3000

    帖子

    3007

    积分

    声名显赫

    Rank: 7Rank: 7Rank: 7

    积分
    3007
    发表于 2018-7-27 08:00:46 | 显示全部楼层
    楼下的接上。。。。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-8-30 14:01
  • 签到天数: 477 天

    连续签到: 2 天

    [LV.9]妙领天机

    10

    主题

    2917

    帖子

    2924

    积分

    声名显赫

    Rank: 7Rank: 7Rank: 7

    积分
    2924
    发表于 2018-7-28 01:01:24 | 显示全部楼层
    我是个凑数的。。。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-8-29 07:48
  • 签到天数: 478 天

    连续签到: 4 天

    [LV.9]妙领天机

    0

    主题

    2997

    帖子

    2993

    积分

    声名显赫

    Rank: 7Rank: 7Rank: 7

    积分
    2993
    发表于 2018-7-29 12:24:59 | 显示全部楼层
    众里寻他千百度,蓦然回首在这里!
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-8-30 19:26
  • 签到天数: 457 天

    连续签到: 2 天

    [LV.9]妙领天机

    12

    主题

    2918

    帖子

    2930

    积分

    声名显赫

    Rank: 7Rank: 7Rank: 7

    积分
    2930
    发表于 2018-8-1 09:39:24 | 显示全部楼层
    为保住菊花,这个一定得回复!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|任逍遥

    GMT+8, 2024-5-7 10:04 , Processed in 0.078083 second(s), 49 queries .

    Powered by 任逍遥 X3.4

    Copyright © 2001-2023, Rxiaoyao Cloud.

    快速回复 返回顶部 返回列表