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

Импорт утверждений

· 3 мин. чтения
Дэн Кларк ([@dandclark1](https://twitter.com/dandclark1)), уверенный импортер утверждений

Новая функция импорта утверждений позволяет заявлениям импорта модулей включать дополнительную информацию вместе со спецификатором модуля. Первоначальное использование этой функции — это возможность импортировать JSON-документы в качестве JSON-модулей:

Проверка наличия приватных свойств, например, `#foo in obj`

· 3 мин. чтения
Марья Хёльтта ([@marjakh](https://twitter.com/marjakh))

Оператор in можно использовать для проверки, существует ли указанное свойство в объекте (или в любом объекте его цепочки прототипов):

const o1 = {'foo': 0};
console.log('foo' in o1); // true
const o2 = {};
console.log('foo' in o2); // false
const o3 = Object.create(o1);
console.log('foo' in o3); // true

Функциональность проверки наличия приватных свойств расширяет оператор in, чтобы поддерживать приватные поля классов:

class A {
  static test(obj) {
    console.log(#foo in obj);
  }
  #foo = 0;
}

A.test(new A()); // true
A.test({}); // false

class B {
 #foo = 0;
}

A.test(new B()); // false; это не тот же #foo

Так как приватные имена доступны только внутри класса, который их определяет, тестирование должно также выполняться внутри класса, например, в методе, как static test выше.

Экземпляры подклассов наследуют приватные поля от родительского класса в качестве собственных свойств:

class SubA extends A {};
A.test(new SubA()); // true

Но объекты, созданные с помощью Object.create (или объекты, которым позднее установлены прототипы с помощью сеттера __proto__ или Object.setPrototypeOf), не получают приватные поля в качестве собственных свойств. Поскольку поиск приватных полей работает только на собственных свойствах, оператор in не находит эти унаследованные поля:

Статические блоки инициализации классов

· 2 мин. чтения
Shu-yu Guo ([@_shu](https://twitter.com/_shu))

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

Интеграция WebAssembly с JavaScript BigInt

· 5 мин. чтения
Алон Закай

Функция JS-BigInt-Integration упрощает передачу 64-битных целых чисел между JavaScript и WebAssembly. В этом посте объясняется, что это значит и почему это полезно, включая упрощение работы для разработчиков, ускорение выполнения кода и уменьшение времени сборки.

Atomics.wait, Atomics.notify, Atomics.waitAsync

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

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

Логические присваивания

· 4 мин. чтения
Шу-Ю Го ([@_shu](https://twitter.com/_shu))

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

`Intl.DisplayNames`

· 4 мин. чтения
Shu-yu Guo ([@_shu](https://twitter.com/_shu)) и Frank Yung-Fong Tang

Веб-приложения, ориентированные на глобальную аудиторию, должны отображать названия языков, регионов, скриптов и валют на различных языках. Переводы этих названий требуют наличия данных, которые доступны в Unicode CLDR. Включение этих данных в приложение требует затрат времени разработчика. Пользователи, скорее всего, предпочтут согласованные переводы названий языков и регионов, поддержание актуальности данных в связи с геополитическими изменениями мира требует постоянного обновления.

Быстрые, параллельные приложения с WebAssembly SIMD

· 9 мин. чтения
Дипти Гандлури ([@dptig](https://twitter.com/dptig)), Томас Лайвли ([@tlively52](https://twitter.com/tlively52)), Ингвар Степанян ([@RReverser](https://twitter.com/RReverser))

SIMD означает Одиночная инструкция, множество данных. SIMD-инструкции представляют собой специальный класс инструкций, которые используют параллелизм данных в приложениях, выполняя одну и ту же операцию одновременно на нескольких элементах данных. Приложения с высокой интенсивностью вычислений, такие как аудио/видео кодеки, процессоры изображений, являются примерами приложений, которые используют SIMD-инструкции для ускорения производительности. Большинство современных архитектур поддерживают некоторые варианты SIMD-инструкций.

Индексы совпадений RegExp

· 4 мин. чтения
Майя Армянова ([@Zmayski](https://twitter.com/Zmayski)), регулярно выражая новые возможности

JavaScript теперь оснащён новым улучшением для регулярных выражений, называемым «индексы совпадений». Представьте, что вы хотите найти недопустимые имена переменных в JavaScript коде, совпадающие с зарезервированными словами, и вывести каретку и «подчеркивание» под именем переменной, например:

`String.prototype.replaceAll`

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

Если вы когда-либо работали со строками в JavaScript, то, скорее всего, сталкивались с методом String#replace. String.prototype.replace(searchValue, replacement) возвращает строку с некоторыми заменёнными совпадениями в зависимости от указанных параметров: