ECMAScript 2016

1. Array.prototype.includes

includes是数组上的简单实例方法,并有助于轻松查找某个项是否在Array中(包括NaN不像indexOf

  1. const arr = [ 1, 2, 3, 4, NaN];
    // es2016不使用
    if(arr.indexOf(3) >= 0){
     console.log(true);
    }
    //使用
    if(arr.includes(3)){
     console.log(true);
    }
    //ps: 注意 indexOf 是不支持查找NaN的
    arr.includes(NaN) // true
    arr.indexOf(NaN) // -1 (indexOf 不支持 NaN)
    (注:想要命名的JavaScript规范contains,但这显然已被Mootools使用,因此他们使用了includes。)
2. 指数运算符

数学运算如加法和减法分别有 + 和 - 等运算符。与他们类似,** 运算符通常用于指数运算。在ECMAScript 2016中,引入了 ** 而不是Math.pow。

  1. // 不使用
    Math.pow(7,2) //49
    //使用
    7**2 //49
  1.  

ECMAScript 2017

1. Object.values()

Object.value()是一个与Object.keys()类似的新函数,但会返回Object自身属性的所有值,排除原型链中的任何值。

  1. const cars = { 'BMW': 3, 'Tesla': 2, 'Toyota': 1 };
    //ES2015
    //ES2017 不使用
    const vals = Object.keys(cars).map(key => cars[key]);
    console.log(vals); //[3, 2, 1]
    //ES2017 and 未来
    //使用
    const values = Object.values(cars);
    console.log(values); // [3, 2, 1]
2. Object.entries()

Object.entries()Object.keys相关,但不是仅返回keys,而是以数组方式返回keys和values。这使得像循环中使用对象或将对象转换为Maps这样的事情变得非常简单。

例 1:

  1. const cars = { 'BMW': 3, 'Tesla': 2, 'Toyota': 1 };
    // ES5.1
    //而不是提取键然后再循环
    Object.keys(cars).forEarch(function(key) {
       console.log('key: ' + key + 'value: ' + cars[key]);
    })
    //ES2017 (ES8)
    //使用 Object.entries
    for(let [key value] of Object.entries(cars)) {
       console.log(`key: ${key} value: ${value}`);
    }
  2.  
  3. 2:
  1. const cars = { 'BMW': 3, 'Tesla': 2, 'Toyota': 1 };
    //ES2015
    //不使用
    //获取对象键,然后添加每个项目以在循环中映射
    const maps = new Map();
    Object.keys(cars).forEarch(key => {
       maps.set(key, cars[key]);
    })
    console.log(map1) // Map { 'BMW' => 3, 'Tesla' => 2, 'Toyota' => 1}
    //ES2017 and 以后
    //使用
    const map = new Map(Object.entries(cars));
    console.log(map) //Map { 'BMW' => 3, 'Tesla' => 2, 'Toyota' => 1}

ECMAScript 2018

1. 共享内存和原子 (Shared memory and atomics)

这是一个巨大的,非常先进的功能,是对JS引擎的核心增强。

主要思想是为JavaScript提供某种多线程功能,以便JS开发人员可以编写高性能,通过允许自己管理内存而不是让JS引擎管理内存来实现并发程序。

这是通过一种名为SharedArrayBuffer的新型全局对象来完成的,它基本上将数据存储在共享内存空间中.所以这个数据可以在主JS线程和网络工作者线程之间共享。

到现在为止,如果我们想要在主JS线程和Web工作者之间共享数据,我们必须复制数据并使用postMessage将其发送到其他线程。就这样子!

您只需使用SharedArrayBuffer,主线程和多个Web工作线程即可访问数据。

但在线程之间共享内存可能会导致竞争状况。为了避免竞争条件,引入了“Atomics”全局对象。当一个线程正在使用它的数据时,Atomics提供了各种方法来锁定共享内存。它还提供了安全地更新共享内存中的数据的方法。

建议通过某个库使用此功能,但现在没有构建在此功能之上的库。

如果您有兴趣,推荐阅读:

  1. From Workers to Shared Memory — lucasfcosta

  2. A cartoon intro to SharedArrayBuffers — Lin Clark

  3. Shared memory and atomics — Dr. Axel Rauschmayer

2. 标记模板字面限制已删除(模板字符串)

首先,我们需要澄清一下“Tagged Template literal”是什么,这样我们可以更好地理解这个特性。

在ES2015+中,有一项称为标记模板文字的功能,允许开发人员自定义如何插入字符串。例如,以标准方式插入字符串,如下所示

  1. //标准字符串插值
    const firstName = 'Raja';
    const greetings = `Hello ${firstName}!`;
    console.log(greetings); // "Hello Raja!"
  2.  

在标记字面量中,可以编写一个函数来接收字符串文字的硬编码部分,例如['Hello','!']和替换变量,例如['Raja'],作为参数写入自定义函数(例如greet),然后从该自定义函数中返回所需的任何内容。

下面的例子显示我们的自定义“Tag”函数greet“Good Morning!”,“Good afternoon,”等日子的时间,依此类推,取决于字符串文字的一天中的时间,并返回一个自定义字符串。

  1. // "标记”函数返回一个自定义字符串文字.
    // 在这个例子中,greet调用timeGreet()来追加Good
    // Morning/Afternoon/Evening 视当天的时间而定.
    function greet(hardCodedPartsArray, ...replacementPartsArray) {
    console.log(hardCodedPartsArray); //[ 'Hello ', '!' ]
    console.log(replacementPartsArray); //[ 'Raja' ]
    let str = '';
    hardCodedPartsArray.forEach((string, i) => {
     if (i < replacementPartsArray.length) {
      str += `${string} ${replacementPartsArray[i] || ''}`;
     } else {
      str += `${string} ${timeGreet()}`; //<-- 插入 Good morning/afternoon/evening here
     }
    });
    return str;
    }
    //用法
    const firstName = 'Raja';
    const greetings = greet`Hello ${firstName}!`; //
  2. 关于ECMAScript 2016, 2017, 2018中新增功能(摘抄)的更多相关文章

      1. ECMAScript 2016,2017 2018 中所有新功能的示例
      1. 很难追踪 JavaScript(ECMAScript)中的新功能. 想找到有用的代码示例更加困难. 因此,在本文中,我将介绍 TC39 已完成 ES2016,ES2017 ES2018(最终草案) ...

      1. [转]ECMAScript 2016,2017 2018 中所有新功能的示例
      1. 很难追踪 JavaScript(ECMAScript)中的新功能. 想找到有用的代码示例更加困难. 因此,在本文中,我将介绍 TC39 已完成 ES2016,ES2017 ES2018(最终草案) ...

      1. CorelDRAW 2018新增功能介绍
      1. 2018411日,CorelDRAW 2018正式对外发布,最新版设计软件包已经过全面更新,是近几年来发行的最强大版本,可协助绘图专业人士将创意转换为令人惊艳的专业视觉设计.CorelDRAW 2 ...

      1. ECMAScript 5中对Array中新增了9个方法
      1. ECMAScript 5中对Array中新增了9个方法: 5个迭代方法(循环操作数组中的各个项):forEach(),map(),filter(),every()和some() 2个归并方法(迭代数组 ...

      1. 2017年-2018年中国MES软件及服务市场研究报告》正式发布!
      1. <2017年-2018年中国MES软件及服务市场研究报告>由e-works Research研究编写,报告深度分析了2017年及2018年中国MES市场发展状况,从市场规模.市场特点.需求 ...

      1. 【转】2016/2017 Web 开发者路线图
      1. 链接:知乎 [点击查看大图] 原图来自LearnCodeAcademy最火的视频,learncodeYouTube上最火的Web开发教学频道,介绍包括HTML/CSS/JavaScript/Subl ...

      1. PyCharm2017.3版即将新增科学计算模式,预览版现在可以下载使用
      1. 编译:Lemon,原文作者:Ernst Haagsman 公众号:Python数据之道(ID:PyDataRoad) pycharm:2017.3版即将新增科学计算模式 JetBrains将发布的新 ...

      1. 2017总结&2018展望
      1. 2017已逝2018已来,是时候放下包袱来好好回顾下2017做了什么,有什么收获,遗憾之处的原因是什么.2018应该怎么做才能让自己满意,才能少一些遗憾. 2017 工作 工作中所参与的项目是一个直播 ...

      1. Windows Server 2016-Hyper-V 2016新增功能
      1. 本文解释了Windows Server 2016Microsoft Hyper-V Server 2016Hyper-V的新增功能和变更功能. Connected Standby兼容(新) 在使 ...

    1. 随机推荐

        1. canvas星空和图形变换
        1. 图形变换. 一.画一片星空 先画一片canvas.widthcanvas.height高的黑色星空,再画200个随机位置,随机大小,随机旋转角度的星星. window.onload=function ...

        1. Linux运维人员共用root帐户权限审计(转至马哥Linux运维)
        1. 一.应用场景 在中小型企业,公司不同运维人员基本都是以root 账户进行服务器的登陆管理,缺少了账户权限审计制度.不出问题还好, 出了问题,就很难找出源头.这里介绍下,如何利用编译bash 使不同的客 ...

        1. Oracle中死锁与等待
        1. 在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(即S锁).当数据对象被加上排它锁时,其他的事务不能不  能对它读取和修改.加了共享锁的数据对象可以被其他事务读取 ...

        1. ECEF和大地坐标系的相互转化
        1. 在阅读 RTKLIB的源码时,发现了ECEF和大地坐标系的相互转换的函数,大地坐标系(φ,λ,h)转成ECEF(X,Y,Z)与所看书籍(GPS原理与接收机,谢刚,电子工业出版社)的公式是一样的,而EC ...

        1. CSS的盒子模型有哪些,区别是什么
        1. 1)盒模型: 内容(content).填充(padding).边界(margin). 边框(border)   2)有两种, IE 盒子模型.标准 W3C 盒子模型:IEcontent部分包含了 b ...

        1. Beta冲刺第一天
        1. 一.昨天的困难 Beta阶段第一天,主要进行本阶段的计划和任务分配,主要问题是上阶段所做的测试工作较少,本阶段需要加强测试工作,并不断修复检测出来的BUG. 二.今天进度 所有成员写简单测试测试整体应 ...

        1. Bate敏捷冲刺每日报告--day2
        1. 1 团队介绍 团队组成: PM:齐爽爽(258) 小组成员:马帅(248),何健(267),蔡凯峰(285)  Git链接:https://github.com/WHUSE2017/C-team 2 ...

        1. 201621123031 Java程序设计》第1周学习总结
        1. 作业01-Java基本概念 1.本周学习总结 1.本周学习内容:Java发展史(简述).Java语言特点.JDK .JRE .JVM .Java的开发步骤.Java开发工具. 2.关键概念之间的联系: ...

        1. mysql命令行大全
        1.   1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...

        1. stringify 字符串转化成json方法
        1. 参照原文:http://www.cnblogs.com/damonlan/ http://www.jb51.net/article/29893.htm stringify的作用主要是序列化对象(转化为 ...