ES2022 有什么新功能
鲸腾FE,来自鲸腾网络。是一支专注于 web 前端的开发团队,并在 web 前端领域积累了多年疑难问题解决经验。崇尚高效、优质、成长、自由、快乐。
ES2022 可能会在 2022 年 6 月成为标准,我们来看看将成为 ES2022 一部分的特性。
Class Fields
Public Instance Fields(公有实例字段)
公有实例字段存在于类的每一个实例中。公有实例字段可以在基类的构造过程中(构造函数主体运行前)使用 Object.defineProperty 添加,也可以在子类构造函数中的 super() 函数结束后添加。
const PREFIX = 'prefix'; class ClassWithComputedFieldName { [`${PREFIX}Field`] = 'prefixed field'; instanceField; } const instance = new ClassWithComputedFieldName(); console.log(instance.prefixField); // 预期输出值: "prefixed field" console.log(instance.instanceField); // 预期输出值: "undefined"
Private Instance Fields(私有实例字段)
私有实例字段使用 # 名称(发音为“哈希名称”)声明,这些名称以 # 开头。即 # 是名称本身的一部分,声明和访问时也需要加上。私有字段在类声明的构造方法中就可被访问。
从作用域之外引用 # 名称、内部在未声明的情况下引用私有字段、或尝试使用 delete 移除声明的字段都会抛出语法错误。
class ClassWithPrivateField { #privateField; constructor() { this.#privateField = 42; delete this.#privateField; // 语法错误 this.#undeclaredField = 444; // 语法错误 } } const instance = new ClassWithPrivateField() instance.#privateField === 42; // 语法错误
Static class fields and private static methods(静态类字段和私有静态方法)
类(class)通过 static 关键字定义静态方法。不能在类的实例上调用静态方法,而应该通过类本身调用。
class ClassWithStaticMethod { static #PRIVATE_STATIC_FIELD; static staticProperty = 'someValue'; static staticMethod() { return 'static method has been called.'; } static publicStaticMethod() { ClassWithStaticMethod.#PRIVATE_STATIC_FIELD = 42; return ClassWithStaticMethod.#PRIVATE_STATIC_FIELD; } static { console.log('Class static initialization block called'); } } // 预期输出值: "Class static initialization block called" console.log(ClassWithStaticMethod.staticProperty); // 预期输出值: "someValue" console.log(ClassWithStaticMethod.staticMethod()); // 预期输出值: "static method has been called." console.log(ClassWithStaticMethod.publicStaticMethod() === 42); // 预期输出值: true
Private instance methods and accessors(私有实例方法)
私有实例方法是类实例上可用的方法,它们的访问方式与私有实例字段相同。
私有实例方法可以是生成器、异步或者异步生成器函数,私有getter和setter。
class ClassWithPrivateAccessor { #message; get #decoratedMessage() { return `${this.#message}`; } set #decoratedMessage(msg) { this.#message = msg; } constructor() { this.#decoratedMessage = 'hello world'; console.log(this.#decoratedMessage); } } new ClassWithPrivateAccessor(); // 预期输出值: "hello world"
RegExp Match Indices
正则表达式匹配索引。向正则表达式添加标志 /d 会生成记录每个组捕获的开始和结束的匹配对象。
从上图可以看到输出的对象中增加了 indices 属性,包含匹配组的开始和结束索引。
除了索引值,还可以通过命名来获取匹配的组,如上图所示。
Top-level await
顶级 await 模块。可以在模块的顶层使用 await 并且不再需要输入异步函数或方法。
动态加载模块
let lodash; try { lodash = await import('https://primary.example.com/lodash'); } catch { lodash = await import('https://secondary.example.com/lodash'); }
使用加载速度最快的资源
const resource = await Promise.any([ fetch('http://example.com/first.txt') .then(response => response.text()), fetch('http://example.com/second.txt') .then(response => response.text()), ]);
.at()
Accessible Object.prototype.hasOwnProperty
即 Object.hasOwn(obj, propKey),可以安全的检查 own 属性,支持所有对象类型。
const proto = { protoProp: 'protoProp', }; const obj = { __proto__: proto, objProp: 'objProp', }; console.log('protoProp' in obj); // 预期输出值: true console.log(Object.hasOwn(obj, 'protoProp')); // 预期输出值: false console.log(Object.hasOwn(proto, 'protoProp')); // 预期输出值: true
Error Cause
错误及其子类可以指定错误的原因。在深度嵌套函数中很有用,可以将错误链接起来以快速找到错误。
function doWork() { try { doSomeWork(); } catch (err) { throw new Error('Some work failed', { cause: err }); } try { doMoreWork(); } catch (err) { throw new Error('More work failed', { cause: err }); } } try { doWork(); } catch (err) { switch(err.message) { case 'Some work failed': handleSomeWorkFailure(err.cause); break; case 'More work failed': handleMoreWorkFailure(err.cause); break; } }

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
网络协议之:socket协议详解之Socket和Stream Socket
简介 不管是在普通的网络编程中还是在netty中,都经常会提到一个词叫做socket,好像socket是一个神奇的东西,使用socket我们可以建立客户端到服务器端的连接,并且和进行客户端和服务器端的通讯,那么socket到底是什么呢?它有哪些分类呢?一起来看看吧。 Socket是什么 socket的中文翻译是套接字,个人觉的这个翻译真的是太差劲了,套接字听起来毫无意义,所以很多人在第一次听到socket这个词的时候肯定很迷茫。 那么什么是socket呢?socket是一种不同程序间进行进程通讯的方法,这些程序可以在同一个服务器上也可以在不同的服务器上。 socket建立连接的基础是IP协议,IP协议被用来进行数据的封装和分组,然后才能够在网络上进行传输。这种依赖于IP协议的socket,又叫做network socket。 通过network socket可以建立客户端和服务器端的连接,客户端和服务器端是通过socket address来发现对方的。 以java为例,我们来看下SocketAddress的定义: public abstract class SocketAddress ...
- 下一篇
社区动态|Apache Doris 社区喜迎新晋 PPMC & Committer
2022 年 3月,经过 Apache Doris 社区 PPMC (孵化器项目管理委员会)的推荐与投票,Apache Doris 社区迎来 1位 PPMC 和 4位 Committer 的加入,他们分别是来自小米的魏祚(GitHub:@weizuo93)以及来自腾讯的衣国垒(GitHub:@yiguolei)、来自蜀海供应链的吴迪(GitHub:@JNSimba)、来自百度的齐建亮(GitHub:@qidaye)和来自美团的蓝华健(GitHub:@924060929)。恭喜各位新晋 PPMC 和 Committer ,让我们一道祝贺以上成员! 魏祚(GitHub:@weizuo93)是来自小米的 OLAP 引擎研发工程师,目前在小米负责 Doris 的研发、优化和运维工作。2020年加入Apache Doris社区后,魏祚对 Apache Doris 进行了多项性能优化、功能开发和 Bug 修复,主要包括 Compaction 机制的优化、Stream Load 两阶段提交功能的开发、Stream Load 审计功能的开发等。另外,魏祚积极参与社区技术分享和知识沉淀,在 Apach...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS关闭SELinux安全模块
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Hadoop3单机部署,实现最简伪集群