Перейти к основному содержимому

9 записей с тегом "ES2020"

Посмотреть все теги

Atomics.wait, Atomics.notify, Atomics.waitAsync

· 7 мин. чтения
[Марья Хёльтта](https://twitter.com/marjakh), неблокирующий блогер

Atomics.wait и Atomics.notify являются низкоуровневыми примитивами синхронизации, полезными для реализации мьютексов и других способов синхронизации. Однако, поскольку Atomics.wait блокирует выполнение, его невозможно вызвать в основном потоке (попытка сделать это вызывает TypeError).

Оператор объединения с null

· 7 мин. чтения
Джастин Риджвелл

Предложение об операторе объединения с null (??) добавляет новый оператор краткого замыкания, предназначенный для обработки значений по умолчанию.

Вы, возможно, уже знакомы с другими операторами краткого замыкания && и ||. Оба этих оператора работают с "истинными" и "ложными" значениями. Представьте следующий пример: lhs && rhs. Если lhs (читаем как "левая сторона") является ложным значением, выражение оценивается как lhs. В противном случае оно оценивается как rhs (читаем как "правая сторона"). Для примера lhs || rhs действует обратное правило. Если lhs является истинным значением, выражение оценивается как lhs. В противном случае оно оценивается как rhs.

Опциональная цепочка

· 4 мин. чтения
Майя Армянова ([@Zmayski](https://twitter.com/Zmayski)), разрыватель опциональных цепочек

Длинные цепочки доступа к свойствам в JavaScript могут быть рискованными, так как любое из них может оцениваться как null или undefined (также известные как "значения nullish"). Проверка существования свойства на каждом шаге легко превращается в глубокую вложенную структуру if-условий или длинное if-условие, воспроизводящее цепочку доступа к свойствам:

`globalThis`

· 2 мин. чтения
Mathias Bynens ([@mathias](https://twitter.com/mathias))

Если вы писали JavaScript для использования в веб-браузере, возможно, вы использовали window для доступа к глобальному объекту this. В Node.js вы могли использовать global. Если вы писали код, который должен работать в обеих средах, вы могли определить, какой из них доступен, и затем использовать его — но список идентификаторов, которые нужно проверять, растет с увеличением числа окружений и случаев использования. Это быстро выходит из-под контроля:

Комбинаторы Promise

· 4 мин. чтения
Маттиас Биненс ([@mathias](https://twitter.com/mathias))

С момента появления промисов в ES2015 JavaScript поддерживал ровно два комбинатора promise: статические методы Promise.all и Promise.race.

Два новых предложения в настоящее время проходят процесс стандартизации: Promise.allSettled и Promise.any. С этими дополнениями в JavaScript будут доступны четыре комбинатора promise, каждый из которых позволяет решать свои задачи.

`String.prototype.matchAll`

· 3 мин. чтения
Матиас Биненс ([@mathias](https://twitter.com/mathias))

Часто нужно повторно применять одно и то же регулярное выражение к строке, чтобы получить все совпадения. В некоторой степени это уже возможно с помощью метода String#match.

В этом примере мы найдем все слова, состоящие только из шестнадцатеричных символов, а затем выведем каждое совпадение:

const string = 'Magic hex numbers: DEADBEEF CAFE';
const regex = /\b\p{ASCII_Hex_Digit}+\b/gu;
for (const match of string.match(regex)) {
console.log(match);
}

// Результат:
//
// 'DEADBEEF'
// 'CAFE'

Однако это дает только подстроки, которые соответствуют. Обычно требуется не только подстроки, но и дополнительная информация, такая как индекс каждой подстроки или группы захвата внутри каждого совпадения.

Уже сейчас можно достичь этого, написав собственный цикл и ведя учет объектов совпадений вручную, но это немного неудобно и не очень удобно:

const string = 'Magic hex numbers: DEADBEEF CAFE';
const regex = /\b\p{ASCII_Hex_Digit}+\b/gu;
let match;
while (match = regex.exec(string)) {
console.log(match);
}

// Результат:
//
// [ 'DEADBEEF', index: 19, input: 'Magic hex numbers: DEADBEEF CAFE' ]
// [ 'CAFE', index: 28, input: 'Magic hex numbers: DEADBEEF CAFE' ]

Новый API String#matchAll делает это проще, чем когда-либо: теперь вы можете написать простой цикл for-of, чтобы получить все объекты совпадений.

const string = 'Magic hex numbers: DEADBEEF CAFE';
const regex = /\b\p{ASCII_Hex_Digit}+\b/gu;
for (const match of string.matchAll(regex)) {
console.log(match);
}

// Результат:
//
// [ 'DEADBEEF', index: 19, input: 'Magic hex numbers: DEADBEEF CAFE' ]
// [ 'CAFE', index: 28, input: 'Magic hex numbers: DEADBEEF CAFE' ]

String#matchAll особенно полезен для регулярных выражений с группами захвата. Он предоставляет полную информацию для каждого отдельного совпадения, включая группы захвата.

const string = 'Favorite GitHub repos: tc39/ecma262 v8/v8.dev';
const regex = /\b(?<owner>[a-z0-9]+)\/(?<repo>[a-z0-9\.]+)\b/g;
for (const match of string.matchAll(regex)) {
console.log(`${match[0]} на ${match.index} в '${match.input}'`);
console.log(`→ владелец: ${match.groups.owner}`);
console.log(`→ репо: ${match.groups.repo}`);
}

Экспорт пространства имен модулей

· 1 мин. чтения
Маттиас Байненс ([@mathias](https://twitter.com/mathias))

В модулях JavaScript уже можно было использовать следующий синтаксис:

import * as utils from './utils.mjs';

Однако симметричный синтаксис export отсутствовал… до сегодняшнего дня:

export * as utils from './utils.mjs';

Это эквивалентно следующему:

import * as utils from './utils.mjs';
export { utils };

BigInt: целочисленные значения произвольной точности в JavaScript

· 9 мин. чтения
Mathias Bynens ([@mathias](https://twitter.com/mathias))

BigInts — это новый числовой примитив в JavaScript, который может представлять целые числа произвольной точности. С помощью BigInts можно безопасно хранить и оперировать большими целыми числами даже за пределами допустимой границы для Number. В этой статье рассматриваются возможные случаи использования и объясняется новая функциональность в Chrome 67 путем сравнения BigInts с Numbers в JavaScript.

Динамический `import()`

· 4 мин. чтения
Матиас Байненс ([@mathias](https://twitter.com/mathias))

Динамический import() представляет новую форму import, похожую на функцию, которая открывает новые возможности по сравнению со статическим import. В этой статье сравниваются оба варианта и представлен обзор новшеств.