专栏首页Tz一号ES10(2019)有哪些更新和新特性?

ES10(2019)有哪些更新和新特性?

  • ES10新特性(2019)
    • 行分隔符(U + 2028)和段分隔符(U + 2029)符号现在允许在字符串文字中,与JSON匹配
    • 更加友好的 JSON.stringify
    • 新增了Array的flat()方法和flatMap()方法
    • 新增了String的trimStart()方法和trimEnd()方法
    • Object.fromEntries()
    • Symbol.prototype.description
    • String.prototype.matchAll
    • Function.prototype.toString()现在返回精确字符,包括空格和注释
    • 简化try {} catch {},修改 catch 绑定
    • 新的基本数据类型BigInt
    • globalThis
    • import()
    • Legacy RegEx
    • 私有的实例方法和访问器
var arr1 = [1, 2, [3, 4]];
arr1.flat();
// [1, 2, 3, 4]
 
var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]
 
var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]
 
//使用 Infinity 作为深度,展开任意深度的嵌套数组
arr3.flat(Infinity);
// [1, 2, 3, 4, 5, 6]

  • 其次,还可以利用flat()方法的特性来去除数组的空项其次,还可以利用flat()方法的特性来去除数组的空项 var arr4 = [1, 2, , 4, 5]; arr4.flat(); // [1, 2, 4, 5]
var arr1 = [1, 2, 3, 4];
 
arr1.map(x => [x * 2]);
// [[2], [4], [6], [8]]
 
arr1.flatMap(x => [x * 2]);
// [2, 4, 6, 8]
 
// 只会将 flatMap 中的函数返回的数组 “压平” 一层
arr1.flatMap(x => [[x * 2]]);
// [[2], [4], [6], [8]]

4.新增了String的trimStart()方法和trimEnd()方法

新增的这两个方法很好理解,分别去除字符串首尾空白字符,这里就不用例子说声明了。

5.Object.fromEntries()

Object.entries()方法的作用是返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)。

Object.fromEntries() 则是 Object.entries() 的反转。

Object.fromEntries() 函数传入一个键值对的列表,并返回一个带有这些键值对的新对象。这个迭代参数应该是一个能够实现@iterator方法的的对象,返回一个迭代器对象。它生成一个具有两个元素的类似数组的对象,第一个元素是将用作属性键的值,第二个元素是与该属性键关联的值。

  • 通过 Object.fromEntries, 可以将 Map 转化为 Object:
const sym = Symbol('The description');

  以前,访问描述的唯一方法是将符号转换为字符串:

assert.equal(String(sym), 'Symbol(The description)');

  现在引入了getter Symbol.prototype.description以直接访问描述:

assert.equal(sym.description, 'The description');

7.String.prototype.matchAll

matchAll() 方法返回一个包含所有匹配正则表达式及分组捕获结果的迭代器。 在 matchAll 出现之前,通过在循环中调用regexp.exec来获取所有匹配项信息(regexp需使用/g标志:

const regexp = RegExp('foo*','g');
const str = 'table football, foosball';
 
while ((matches = regexp.exec(str)) !== null) {
  console.log(`Found ${matches[0]}. Next starts at ${regexp.lastIndex}.`);
  // expected output: "Found foo. Next starts at 9."
  // expected output: "Found foo. Next starts at 19."
}

如果使用matchAll ,就可以不必使用while循环加exec方式(且正则表达式需使用/g标志)。使用matchAll 会得到一个迭代器的返回值,配合 for...of, array spread, or Array.from() 可以更方便实现功能:

const regexp = RegExp('foo*','g');
const str = 'table football, foosball';
let matches = str.matchAll(regexp);
 
for (const match of matches) {
  console.log(match);
}
// Array [ "foo" ]
// Array [ "foo" ]
 
// matches iterator is exhausted after the for..of iteration
// Call matchAll again to create a new iterator
matches = str.matchAll(regexp);
 
Array.from(matches, m => m[0]);
// Array [ "foo", "foo" ]

8.Function.prototype.toString()现在返回精确字符,包括空格和注释

function /* comment */ foo /* another comment */() {}
 
// 之前不会打印注释部分
console.log(foo.toString()); // function foo(){}
 
// ES2019 会把注释一同打印
console.log(foo.toString()); // function /* comment */ foo /* another comment */ (){}
 
// 箭头函数
const bar /* comment */ = /* another comment */ () => {};
 
console.log(bar.toString()); // () => {}

9.修改 catch 绑定

在 ES10 之前,我们必须通过语法为 catch 子句绑定异常变量,无论是否有必要。很多时候 catch 块是多余的。 ES10 提案使我们能够简单的把变量省略掉。

不算大的改动。

之前是

try {} catch(e) {} 

现在是

try {} catch {}

10.新的基本数据类型BigInt

现在的基本数据类型(值类型)不止5种(ES6之后是六种)了哦!加上BigInt一共有七种基本数据类型,分别是: String、Number、Boolean、Null、Undefined、Symbol、BigInt

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 只会Vue怎么开发小程序?Vue和微信小程序的到底有哪些区别?

    写了vue项目和小程序,发现二者有许多相同之处,在此想总结一下二者的共同点和区别。

    Tz一号
  • 新手怎么学JS?JavaScript基础入门

    在正式的学习JavaScript之前,我们先来学习一些小工具,帮助我们更好的学习和理解后面的内容。

    Tz一号
  • git的基本使用和多人协作合并管理

    配置SSH 在bash中执行以下命令:ssh-keygen -t rsa -C '522864637@qq.com',然后一路按回车

    Tz一号
  • Linux下安装sqlite3

    安装完成以后,就可以使用sqlite3了,在终端下输入sqlite3,如果看到下面的结果就说明可以使用sqlite3了。

    zy010101
  • Android drawable微技巧,你所不知道的drawable的那些细节

    好像有挺久时间没更新博客了,最近我为了准备下一个系列的博客,也是花了很长的时间研读源码。很遗憾的是,下一个系列的博客我可能还要再过一段时间才能写出来,那么为了不...

    用户1158055
  • 六、解析库之Beautifulsoup模块

    一 介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的...

    用户1214487
  • 从0开始学习SpringCould(7)-SpringBoot 多环境配置

    为什么需要多环境配置? 真正开发中,环境一般都是分离的,多数情况下都分为:开发环境、测试环境、生产环境等等。 以这三套环境为例,如果这三套环境有三个数据库,每次...

    企鹅号小编
  • 【自然框架.重新开始】总体设计

      好久都没写博客了,出去体验了一下人生,呵呵。   最近加入了一个团队,打算把自然框架重新设计一下,以适应更广阔的需求。   首先是UI。UI一直是弱项,这个...

    用户1174620
  • 《SpringBoot篇:004》《SpringBoot配置文件:生产环境、开发环境、测试环境》

    将同一环境application.yml修改为: active: dev,使用开发环境运行结果:此时使用的是80端口

  • 华为网络工程师 | ensp中的华为防火墙设备如何能实现web登录做配置

    防火墙技术,最初是针对 Internet 网络不安全因素所采取的一种保护措施。顾名思义,防火墙就是用来阻挡外部不安全因素影响的内部网络屏障,其目的就是防...

    网络技术联盟站

扫码关注云+社区

领取腾讯云代金券