ECMAScript 2022 中的新特性!

本文介绍了ECMAScript2022的几个重要特性,包括使用#定义的公共和私有实例字段,私有实例方法和访问器,静态成员的添加,正则表达式的新功能/d,顶层await的使用,以及错误对象携带错误原因等,这些新特性增强了JavaScript的类和错误处理能力,为开发者提供了更多便利。
摘要由CSDN通过智能技术生成


0f99c973af57301490b3682009a83d47.gif

新钛云服已累计为您分享718篇技术干货

7ed2287fff1f39c13d4ef3e40ed9de70.gif

本文盘点ECMAScript 2022 中的新特性,包括顶级等待、RegExp 匹配索引、新的公共和私有类字段等。

一、公共和私有实例字段

最新的 ES13 规范允许我们将成员字段内联定义为类主体的一部分,我们可以使用#来表示私有字段。

class Foo {
    title = "";
    #artist = "";
    constructor(title, artist){
      this.title = title;
      this.#artist = artist;
    }
}
let foo = new Song("public", "privite property");
console.log(song1.title);
// “property”
console.log(song1.artist);
// undefined

使用class关键字定义了一个Foo类 。这个类有两个成员,titleartist。该artist成员以井号 (#) 符号为前缀,因此它是私有的。我们允许在构造函数中设置这些字段,构造函数必须this.#artist再次使用哈希前缀访问,不然会被覆盖成公共字段。

二、私有实例方法和访问器
class PageVM {
  title = "";
  #artist = "";
  constructor(title, artist){
    this.title = title;
    this.#artist = artist;
  }
  get getArtist() {
    return this.#artist;
  }
  set #setArtist(artist) {
    this.#artist = artist;
  }
}
三、将静态成员添加到类
class Article {
  static label = "ES 2022";
}
console.log(Article.label) // Es 2022

/***** 私有静态字段 ********/
class Article {
  static #label = "es 2022";
  constructor() {
    console.log(Article.#label) // es 2022
  }
}
let son = new Article();
Article.#label // undefined

可以有一个带有 static 的静态私有字段#label;即私有静态字段。

四、/d 正则

提供一个indices数组,数值为匹配到的字符串的开始和结束位置

const str = 'Hello world!';
//查找"Hello"
const patt = /Hello/d;
const res = patt.exec(str);
console.log(res);
/*[
  'Hello',
  index: 0,
  input: 'Hello world!',
  groups: undefined,
  提供数组indices: [ [ 0, 5 ], groups: undefined ]
]*/
五、 顶层await
const sleep = (delay = 1000) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(true);
    }, delay);
  });
};

await sleep(3000);

之前的await只能允许在async函数中使用,ES13允许在顶层使用await函数

六、检查私有字段是否存在
class PageVm { 
  #artist; 
  checkField(){ 
    return #artist in this;
  } 
}
let vm = new PageVm();
vm.checkField(); // true
七、at 负索引查找
const list = ['apple', 'banner', 'Grape', 'other', 'pear'];
list[0]; // apple
list.at(0); // apple
list.at(-1); // pear
list.at(-2); // other
八、hasOwn
let foo = Object.create(null);
foo.hasOwnProperty = function(){};
Object.hasOwnProperty(foo, 'hasOwnProperty'); // Error: Cannot convert object to primitive value
Object.hasOwnProperty.call(foo, 'hasOwnProperty') // true
Object.hasOwn(foo, 'hasOwnProperty'); // true
九、错误原因
function errormsg() {
  try {
    noFun();
  } catch (err) {
    // 支持原因
    throw new Error('causeError', { cause: 'fun为定义,diy error msg' });
  }
}
function goFun() {
    try {
    errormsg();
  } catch (err) {
    console.log(`Cause by: ${err.cause}`); // Cause by: fun为定义,diy error msg
  }
}
goFun()

Error,支持包含错误原因支持,这允许在错误链中进行类似 Java 的堆栈跟踪。错误构造函数现在允许包含一个cause字段的选项

总结:

ES每次更新都带了便于开发者操作的简化和新特性。

  1. 数组的负索引,不需要知道数组的长度就可以进行一些操作

  2. class的私有属性和方法,提供了更多的操作空间

  3. Error对象的错误信息,利于排查

  4. 顶层await不必再在外层包裹异步函数

    推荐阅读   

1f5ee0ea56d397ea278a2b36701794bb.png

bd3c611522019990bcfbeee966553ba8.png

    推荐视频    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值