新的 class elements:公共和私有实例字段、公共和私有静态字段、私有实例方法和访问器以及私有静态方法和访问器;
类内的静态块,用于执行每个类的评估初始化;
#x in obj语法,用于测试对象上是否存在私有字段;
classX{
#foo;method(){console.log(this.#foo)}}
通过/dflag 的正则表达式匹配索引,为匹配的子字符串提供开始和结束索引;
constre1=/a+(?<Z>z)?/d;// indices are relative to start of the input string:consts1="xaaaz";constm1=re1.exec(s1);m1.indices[0][0]===1;m1.indices[0][1]===5;s1.slice(...m1.indices[0])==="aaaz";m1.indices[1][0]===4;m1.indices[1][1]===5;s1.slice(...m1.indices[1])==="z";m1.indices.groups["Z"][0]===4;m1.indices.groups["Z"][1]===5;s1.slice(...m1.indices.groups["Z"])==="z";// capture groups that are not matched return `undefined`:constm2=re1.exec("xaaay");m2.indices[1]===undefined;m2.indices.groups["Z"]===undefined;
Error对象的cause属性,可用于记录错误的因果链;
asyncfunctiondoJob(){constrawResource=awaitfetch('//domain/resource-a').catch(err=>{thrownewError('Download raw resource failed',{cause: err});});constjobResult=doComputationalHeavyJob(rawResource);awaitfetch('//domain/upload',{method: 'POST',body: jobResult}).catch(err=>{thrownewError('Upload job result failed',{cause: err});});}try{awaitdoJob();}catch(e){console.log(e);console.log('Caused by',e.cause);}// Error: Upload job result failed// Caused by TypeError: Failed to fetch
Strings、Arrays 和 TypedArrays 的at方法,允许相对索引;
functionat(n){// ToInteger() abstract opn=Math.trunc(n)||0;// Allow negative indexing from the endif(n<0)n+=this.length;// OOB access is guaranteed to return undefinedif(n<0||n>=this.length)returnundefined;// Otherwise, this is just normal property accessreturnthis[n];}constTypedArray=Reflect.getPrototypeOf(Int8Array);for(constCof[Array,String,TypedArray]){Object.defineProperty(C.prototype,"at",{value: at,writable: true,enumerable: false,configurable: true});}
ECMAScript 2022 正式发布
ECMAScript 2022 现已获得 ECMA International 的批准。ECMAScript 是标准化的 JavaScript 语言,于 1997 年发布了第一版,现已发展成为世界上使用最广泛的通用编程语言之一。
本 Ecma 标准定义了 ECMAScript 2022 Language,是 ECMAScript 语言规范的第 13 版。
ECMAScript 2022 主要包含内容有:
await
,允许在模块的顶层使用关键字;#x in obj
语法,用于测试对象上是否存在私有字段;/d
flag 的正则表达式匹配索引,为匹配的子字符串提供开始和结束索引;Error
对象的cause
属性,可用于记录错误的因果链;at
方法,允许相对索引;Object.hasOwn
,这是Object.prototype.hasOwnProperty
的一个更简洁方便的替代方法。简化为:
具体可查看: