去年,我写了一篇有关ES2022今年的新功能的文章
ES2023的功能
1.从最后一个查找数组
此功能将使我们能够根据条件从数组的最后一个到第一个元素。
const array = [{a: 1, b: 1}, {a: 2, b: 2}, {a: 3, b: 3}, {a: 4, b: 4}]
console.log(array.findLast(n => n)); //result -> {a: 4,b: 4 }
console.log(array.findLast(n => n.a * 5 === 20)); // result -> {a:4,b:4} as the condition is true so it returns the last element.
console.log(array.findLast(n => n.a * 5 === 21)); //result -> undefined as the condition is false so return undefined instead of {a:4,b:4}.
console.log(array.findLastIndex(n => n.a * 5 === 21)); // result -> -1 as the condition is not justified for returning the last element.
console.log(array.findLastIndex(n => n.a * 5 === 20)); // result -> 3 which is the index of the last element as the condition is true.
2. Hashbang Grammer
此功能将使我们能够在某些CLI中使用Hashbang / Shebang。
Shebang由#!代表,是脚本开头的一条特殊行,告诉操作系统在执行脚本时要使用的是要使用的操作系统。
#!/usr/bin/env node
// in the Script Goal
'use strict';
console.log(2*3);
#!/usr/bin/env node
// in the Module Goal
export {};
console.log(2*2);
#!/usr/bin/env node
此行将直接调用node.js源文件,作为其自己的可执行文件。
我们不需要此行(#!/usr/bin/env node)
即可通过节点解释器明确调用文件,例如,node ./file
3.符号作为弱图键
这允许使用唯一的符号作为键。当前,弱映射仅限于仅允许对象作为密钥。对象被用作弱图的键,因为它们具有相同的身份方面。
符号是Ecmascript中唯一的原始类型,允许使用符号作为键而不是使用弱图创建新对象的唯一值。
const weak = new WeakMap();
const key = Symbol('my ref');
const someObject = { a:1 };
weak.set(key, someObject);
console.log(weak.get(key));
更多与ShadowRealms和Record & Tuples相关的用例使用符号作为feekmaps
4.通过复制更改数组
这提供了Array.prototype
上的其他方法,可以通过更改返回其新副本而不是更新原始数组来更改数组。
新的Array.prototype
引入功能是:
Array.prototype.toReversed()
Array.prototype.toSorted(compareFn)
Array.prototype.toSpliced(start, deleteCount, ...items)
-
Array.prototype.with(index, value)
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
/* toReversed */
const reversed = numbers.toReversed();
console.log("reversed", reversed); // "reversed", [9, 8, 7, 6, 5, 4, 3, 2, 1]
console.log("original", numbers); // "original", [1, 2, 3, 4, 5, 6, 7, 8, 9]
/* toSorted */
const sortedArr = numbers.toSorted();
console.log("sorted", sortedArr); // "sorted", [1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log("original", numbers); // "original", [1, 2, 3, 4, 5, 6, 7, 8, 9]
/* with */
const replaceWith = numbers.with(1, 100);
console.log("with", replaceWith); // "with", [1, 100, 3, 4, 5, 6, 7, 8, 9]
console.log("original", numbers); // "original", [1, 2, 3, 4, 5, 6, 7, 8, 9]
/* toSpliced */
const splicedArr = numbers.toSpliced(0, 4);
console.log("toSpliced", splicedArr); // "toSpliced", [5, 6, 7, 8, 9]
console.log("original", numbers); // "original", [1, 2, 3, 4, 5, 6, 7, 8, 9]
这些是ES2023的一些很棒的功能,我真的很期待在我的日常编码中亲自尝试。
愉快的编码! ð©ð»