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

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

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

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

Необязательное связывание `catch`

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

Конструкция catch в инструкции try ранее требовала связывание:

try {
doSomethingThatMightThrow();
} catch (exception) {
// ^^^^^^^^^
// Мы должны указать связывание, даже если не используем его!
handleException();
}

В ES2019 catch теперь может использоваться без связывания. Это полезно, если объект exception не требуется в коде, обрабатывающем исключение.

try {
doSomethingThatMightThrow();
} catch { // → Без связывания!
handleException();
}

Поддержка необязательного связывания catch

Методы `String.prototype.trimStart` и `String.prototype.trimEnd`

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

ES2019 представляет String.prototype.trimStart() и String.prototype.trimEnd():

const string = '  hello world  ';
string.trimStart();
// → 'hello world '
string.trimEnd();
// → ' hello world'
string.trim(); // ES5
// → 'hello world'

Эта функциональность ранее была доступна через нестандартные методы trimLeft() и trimRight(), которые остаются алиасами для новых методов для обратной совместимости.

const string = '  hello world  ';
string.trimStart();
// → 'hello world '
string.trimLeft();
// → 'hello world '
string.trimEnd();
// → ' hello world'
string.trimRight();
// → ' hello world'
string.trim(); // ES5
// → 'hello world'

Обновленный `Function.prototype.toString`

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

Function.prototype.toString() теперь возвращает точно такие же фрагменты текста исходного кода, включая пробелы и комментарии. Вот пример, сравнивающий старое и новое поведение:

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

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

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

`Promise.prototype.finally`

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

Promise.prototype.finally позволяет зарегистрировать обратный вызов, который вызывается при завершении промиса (то есть при выполнении или отклонении).

Представьте, что вы хотите получить данные, чтобы показать их на странице. Ах да, вы хотите показать индикатор загрузки, когда запрос начинается, и скрыть его, когда запрос завершается. Когда что-то идет не так, вы показываете сообщение об ошибке вместо этого.

const fetchAndDisplay = ({ url, element }) => {
showLoadingSpinner();
fetch(url)
.then((response) => response.text())
.then((text) => {
element.textContent = text;
hideLoadingSpinner();
})
.catch((error) => {
element.textContent = error.message;
hideLoadingSpinner();
});
};

`Intl.PluralRules`

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

Иñtërnâtiônàlizætiøn — это сложно. Работа с множественными числами — это одна из многих задач, которая может показаться простой, пока вы не осознаете, что каждый язык имеет свои правила множественного числа.

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

  • 1 cat, т.е. форма 'one', известная как единственное число в английском
  • 2 cats, но также 42 cats, 0.5 cats и т.д., т.е. форма 'other' (единственная другая), известная как множественное число в английском.

Совершенно новый Intl.PluralRules API сообщает, какая форма применяется в выбранном вами языке на основе заданного числа.

const pr = new Intl.PluralRules('en-US');
pr.select(0); // 'other' (например, '0 cats')
pr.select(0.5); // 'other' (например, '0.5 cats')
pr.select(1); // 'one' (например, '1 cat')
pr.select(1.5); // 'other' (например, '1.5 cats')
pr.select(2); // 'other' (например, '2 cats')

Объектные свойства rest и spread

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

Прежде чем обсуждать объектные свойства rest и spread, давайте вспомним очень похожую функцию из прошлого.

ES2015: элементы rest и spread для массивов

Хороший старый ECMAScript 2015 ввел элементы rest для деструктурирующего присваивания массивов и элементы spread для литералов массивов.

// Элементы rest для деструктурирующего присваивания массивов:
const primes = [2, 3, 5, 7, 11];
const [first, second, ...rest] = primes;
console.log(first); // 2
console.log(second); // 3
console.log(rest); // [5, 7, 11]

// Элементы spread для литералов массивов:
const primesCopy = [first, second, ...rest];
console.log(primesCopy); // [2, 3, 5, 7, 11]

ES2018: объектные свойства rest и spread 🆕

Что же нового? _пропоузал добавляет возможность использовать свойства rest и spread для литералов объектов.

// Свойства rest для деструктурирующего присваивания объектов:
const person = {
firstName: 'Себастьян',
lastName: 'Маркбåге',
country: 'США',
state: 'Калифорния',
};
const { firstName, lastName, ...rest } = person;
console.log(firstName); // Себастьян
console.log(lastName); // Маркбåге
console.log(rest); // { country: 'США', state: 'Калифорния' }