首页 > 其他分享 >【ES】338- ECMAScirpt 2019 新特性汇总

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

时间:2022-11-29 14:01:39浏览次数:68  
标签:prototype console log Symbol Object 2019 pingan8787 ECMAScirpt 338



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

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

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

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('

    标签:prototype,console,log,Symbol,Object,2019,pingan8787,ECMAScirpt,338
    From: https://blog.51cto.com/u_11887782/5894924

相关文章

  • Windows10+VS2019从源码编译 Qt5
    参考Windows10+MSVC(VS2022)从源码编译QT5.12.11-知乎(zhihu.com)qt-labs/vstools~qt-labs/vstools(github.com)BuildingQt5fromGit/zh-QtWikiQtConfi......
  • vs2019编译Qt4.8.7
    下载4.8.7源码Indexof/archive/qt/4.8/4.8.7复制mkspecs\win32-msvc2015到mkspecs\win32-msvc2019修改qmake.conf第2行:2017=>2019第4行:2017=>2019第12......
  • Exchange 2013/2016/2019邮件大小限制
     Exchange2013/2016/2019邮件大小限制可以在三个位置上配置Exchange上的默认邮件大小限制:组织传输设置发送/接收连接器设置用户邮箱设置1.打开ExchangeManageme......
  • 2019红帽杯ctf-reverse-easyRe
    一道很奇怪的题目先拖进ida分析,然后发现先检验了长度和输入,输入经过异或后和字符串进行比较  先用脚本跑出来 跑出来是一句提示,前四个字符是flag不太理解什么意......
  • windows error LNK2019
    温馨提示,请使用ctrl+F进行快速查找ws2_32.liberrorLNK2001:无法解析的外部符号__imp_htonserrorLNK2001:无法解析的外部符号__imp_ntohlerrorLNK2001:无法解析......
  • VS2019使用gtest
    VS2019使用gtestGoogleTest测试框架介绍(一)_liitdar的博客-CSDN博客_gooletest术语test/testcase/testsuitMeaningGoogleTestTermISTQBTermExercisea......
  • AT_otemae2019_a 寝坊だ!ピ太郎! (You overslept, Pitaro) 题解
    题目大意:给出两个数 a,b 如果 a+0.5>b,输出 1,否则输出 0。a,b 均为整数。思路:这是一道模拟题,模拟即可。代码:注意:要开浮点型!#include<bits/stdc++.h>using......
  • 2019红帽杯ctf-reverse-xx
    一道xxtea加密的题主要过程分五步1、读入数据2、构造key数组3、xxtea加密4、打乱数据5、二次加密先查壳,64位无壳直接拖入ida分析  读入数据并计算长度判断......
  • P3387 缩点
     缩点求DAG最长路#include<bits/stdc++.h>usingnamespacestd;constintN=1e4+2;intn,m,pool,a[N];intlow[N],dfn[N];intkcnt,id[N];intf[N],v......
  • P5363 [SDOI2019]移动金币
    P5363[SDOI2019]移动金币转化一下题意,移动一个金币相当于把这个金币前面的格子移到了后面,这是经典的阶梯\(\text{Nim}\),因为题目是把格子向后移,所以我们只要保证一共\(m......