当前位置 : 主页 > 网络编程 > PHP >

【ES】338- ECMAScirpt 2019 新特性汇总

来源:互联网 收集:自由互联 发布时间:2023-09-06
最近 ECMAScript2019,最新提案完成: tc39 Finished Proposals ,我这里也是按照官方介绍的顺序进行整理,如有疑问,可以查看官方介绍啦~ 另外之前也整理了 ​​ 【汇总】59篇原创系列汇总



最近 ECMAScript2019,最新提案完成:tc39 Finished Proposals,我这里也是按照官方介绍的顺序进行整理,如有疑问,可以查看官方介绍啦~

另外之前也整理了 ​​【汇总】59篇原创系列汇总​​(可以点击查看),也包含《ES6/ES7/ES8/ES9系列》。

【ES】338- ECMAScirpt 2019 新特性汇总_分隔符

1. 可选的 catch 绑定

1.1 介绍

在 ECMAScript2019 最新提案中,支持我们在使用 ​​trycatch​​ 错误异常处理时,选择性的给 ​​catch​​传入参数。

即我们可以不传入 ​​catch​​ 参数。

正常使用 ​​trycatch​​:

  1. ​​​try {​​​
  2. ​​ // todo​​
  3. ​​} catch (err){​​
  4. ​​ console.log('err:',err)​​
  5. ​​}​​

在 ES10 中可以这么使用:

  1. ​​​try {​​​
  2. ​​ // todo​​
  3. ​​} catch {​​
  4. ​​ // todo​​
  5. ​​}​​

1.2 使用场景

当我们不需要对 ​​catch​​ 返回的错误信息进行处理时,比如:我们对于一些数据处理,经常会出现格式报错,但是我们并不关心这个错误,我们只需要继续处理,或重新请求数据等。

这种情况,我们就可以使用这个新特性,当然,还是需要根据实际情况考虑。

2. JSON.superset

2.1 介绍

  • 来源背景:

由于在 ES2019 之前不支持转义行分隔符 ( ​​\u2028​​) 和段落分隔符 ( ​​\u2029​​) 字符,并且在解析过程中会报错: ​​SyntaxError:Invalidorunexpected token​​。

  1. ​​​const LS = "";​​​
  2. ​​const PS = eval("'\u2029'");// SyntaxError: Invalid or unexpected token​​
  • 解决方案:

JSON 语法由* ECMA-404* 定义并由 RFC 7159 永久修复,允许行分隔符 ( ​​\u2028​​) 和段落分隔符 ( ​​\u2029​​) 字符,直接出现在字符串中。

2.2 使用

在 ES10 中,我们就可以直接使用 ​​eval("'\u2029'");​​ 而不会再提示错误。

3. Symbol.prototype.description

3.1 介绍

在 ES6 中引入 Symbol 这个基本数据类型,可以实现一些数据内省等高级功能。

这次 ES10 中,为 Symbol 类型增加 ​​Symbol.prototype.description​​ 的一个访问器属性,用来获取 ​​Symbol​​ 类型数据的描述信息(description)。

3.2 使用

MDN 上的案例介绍:

  1. ​​​console.log(Symbol('pingan8787').description);​​​
  2. ​​// expected output: "pingan8787"​​

  3. ​​console.log(Symbol.iterator.description);​​
  4. ​​// expected output: "Symbol.iterator"​​

  5. ​​console.log(Symbol.for('leo').description);​​
  6. ​​// expected output: "leo"​​

  7. ​​console.log(Symbol('pingan8787').description + ' and leo!');​​
  8. ​​// expected output: "pingan8787 and leo!"​​

另外我们也可以这么使用:

  1. ​​​let pingan = Symbol('pingan8787').description;​​​
  2. ​​console.log(pingan === 'pingan8787'); // true​​

4. Function.prototype.toString

4.1 介绍

在 ES10 之前,我们对一个函数调用 ​​toString()​​ 方法,返回的结果中会将注释信息去除。

在 ES10 之后,函数再调用 ​​toString()​​ 方法,将准确返回原有内容,包括空格和注释等:

  1. ​​​let pingan8787 = function(){​​​
  2. ​​ // do something​​
  3. ​​ console.log('leo')​​
  4. ​​}​​
  5. ​​pingan8787.toString();​​
  6. ​​/**​​
  7. ​​"function(){​​
  8. ​​ // do something​​
  9. ​​ console.log('leo')​​
  10. ​​}"​​
  11. ​​*/​​

5. Object.fromEntries

5.1 介绍

​​Object.fromEntries​​ 是 ES10 中新的静态方法,用于将键值对列表转换为对象。

​​Object.fromEntries()​​ 方法接收一个键值对的列表参数,并返回一个带有这些键值对的新对象。

这个迭代参数应该是一个能够实现 ​​@iterator​​ 方法的的对象,返回一个迭代器对象。它生成一个具有两个元素的类数组的对象,第一个元素是将用作属性键的值,第二个元素是与该属性键关联的值。

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

5.2 使用

​​Object.entries​​ 和 ​​Object.fromEntries()​​ 互转

  1. ​​​let leo = { name: 'pingan8787', age: 10};​​​
  2. ​​let arr = Object.entries(leo);​​
  3. ​​console.log(arr);// [["name", "pingan8787"],["age", 10]]​​

  4. ​​let obj = Object.fromEntries(arr);​​
  5. ​​console.log(obj);// {name: "pingan8787", age: 10}​​

​​
​
​

​​Map​​ 转化为 ​​Object​​

  1. ​​​const map = new Map([ ['name', 'pingan8787'], ['age', 10] ]);​​​
  2. ​​const obj = Object.fromEntries(map);​​
  3. ​​console.log(obj); // {name: "pingan8787", age: 10}​​

​​
​
​

​​Array​​ 转化为 ​​Object​​

  1. ​​​const arr = [ ['name', 'pingan8787'], ['age', 10] ];​​​
  2. ​​const obj = Object.fromEntries(arr);​​
  3. ​​console.log(obj); // {name: "pingan8787", age: 10}​​

6. 更友好的 JSON.stringify

6.1 介绍

更友好的 ​​JSON.stringify​​,对于一些超出范围的 Unicode 字符串,为其输出转义序列,使其成为有效 Unicode 字符串。

6.2 使用

  1. ​​// Non-BMP characters still serialize to surrogate pairs.​​
  2. ​​JSON.stringify('
上一篇:推荐几款软件界面模型设计工具
下一篇:没有了
网友评论