您的位置:首页 > IT > 正文

世界新资讯:ECMAScript 2023 正式发布

来源:OSCHINA     时间:2023-06-30 12:23:56

ECMAScript 2023现已获得ECMA International的批准。ECMAScript 是标准化的 JavaScript 语言,于 1997 年发布了第一版,现已发展成为世界上使用最广泛的通用编程语言之一。


(资料图片仅供参考)

本 Ecma 标准定义了 ECMAScript 2023 Language,是 ECMAScript 语言规范的第 14 版。

ECMAScript 2023,第 14 版,在Array.prototypeTypedArray.prototype上引入了toSortedtoReversedwithfindLastfindLastIndex方法,以及Array.prototype上的toSpliced方法;在文件开头增加了对#!注释的支持,以更好地促进 ECMAScript 文件的可执行;并允许在弱集合中使用大多数 Symbols 作为 keys。

最终提案由 ECMA TC39 在 GitHub 上发布,详细阐述了今年将发布的四个功能:

Array find from last

该提案在ArrayTypedArray原型上增加了findLast()findLastIndex()方法。这与 Array.prototype.find和Array.prototype.findIndex的行为相同,但会从最后一个迭代到第一个

const array = [{ value: 1 }, { value: 2 }, { value: 3 }, { value: 4 }];array.find(n => n.value % 2 === 1); // { value: 1 }array.findIndex(n => n.value % 2 === 1); // 0// ======== Before the proposal =========== // find[...array].reverse().find(n => n.value % 2 === 1); // { value: 3 }// findIndexarray.length - 1 - [...array].reverse().findIndex(n => n.value % 2 === 1); // 2array.length - 1 - [...array].reverse().findIndex(n => n.value === 42); // should be -1, but 4// ======== In the proposal =========== // findarray.findLast(n => n.value % 2 === 1); // { value: 3 }// findIndexarray.findLastIndex(n => n.value % 2 === 1); // 2array.findLastIndex(n => n.value === 42); // -1

Hashbang Grammar

Hashbang,也称为 shebang,是可执行脚本开头的字符序列,用于定义要运行的程序的解释器。当 Unix 内核的程序加载器执行 JavaScript 程序时,主机会剥离 hashbang 以生成有效源,然后再将其传递给引擎。Hashbang Grammar 提案标准化了它的完成方式。

#!/usr/bin/env node// in the Script Goal"use strict";console.log(1);
#!/usr/bin/env node// in the Module Goalexport {};console.log(1);

Symbols as WeakMap keys

该提案扩展了 WeakMap API,以允许使用 unique Symbols 作为 keys。

const weak = new WeakMap();// Pun not intended: being a symbol makes it become a more symbolic keyconst key = Symbol("my ref");const someObject = { /* data data data */ };weak.set(key, someObject);

Change Array by Copy

Array.prototypeTypedArray.prototype上提供了额外的方法,通过返回一个带有变化的新 copy 来实现对数组的改变。

const sequence = [1, 2, 3];sequence.toReversed(); // => [3, 2, 1]sequence; // => [1, 2, 3]const outOfOrder = new Uint8Array([3, 1, 2]);outOfOrder.toSorted(); // => Uint8Array [1, 2, 3]outOfOrder; // => Uint8Array [3, 1, 2]const correctionNeeded = [1, 1, 3];correctionNeeded.with(1, 2); // => [1, 2, 3]correctionNeeded; // => [1, 1, 3]

具体可查看:

https://262.ecma-international.org/14.0/ https://www.ecma-international.org/wp-content/uploads/ECMA-262_14th_edition_june_2023.pdf

相关文章