Що нового в ES2023? 🤔
Tags: javascript, programming, tutorial, algorithms
Published: 2023-07-23 15:47:40

## 1. Знайти масив з останнього

Ця функція дозволить нам знайти елемент від останнього до першого в масиві на основі умови.

```js
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

Ця функція дозволить нам використовувати Hashbang / Shebang у деяких CLI.
Shebang представлено **#!** і є спеціальним рядком на початку сценарію, який **повідомляє операційній системі, який інтерпретатор використовувати під час виконання сценарію**.

```js
#!/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. Символи як ключі WeakMap

Це дозволяє використовувати унікальні символи як ключі. Наразі WeakMaps обмежено дозволом лише об’єктів як ключів. Об’єкти використовуються як ключі для WeakMaps, оскільки вони мають однаковий аспект ідентичності.

Symbol — це єдиний примітивний тип у ECMAScript, який дозволяє використовувати для нього унікальні значення, використовуючи Symbol як ключ замість створення нового об’єкта за допомогою WeakMap.

```js
const weak = new WeakMap();

const key = Symbol('my ref');
const someObject = { a: 1 };

weak.set(key, someObject);
console.log(weak.get(key));
```

Більше випадків використання, пов’язаних із [ShadowRealms](https://github.com/tc39/proposal-symbols-as-weakmap-keys#shadowrealms-membranes-and-virtualization) і [Record & Tuples](https://github.com/tc39/proposal-symbols-as-weakmap-keys#record-and-tuples) із використанням Symbols як WeakMaps.

## 4. Змінити масив шляхом копіювання

Це надає додаткові методи для `Array.prototype` внесення змін до масиву шляхом повернення його нової копії зі зміною замість оновлення вихідного масиву.

Нові `Array.prototype` введені функції:

1. Array.prototype.toReversed()
2. Array.prototype.toSorted(compareFn)
3. Array.prototype.toSpliced(start, deleteCount, ...items)
4. Array.prototype.with(index, value)

```js
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.