Восприятие: 🌟🌟🌟🌟🌟
Вкус: Гоночный краб
Время приготовления: 5 мин.
Эта статья попала в одноименный склад Github фронтенд-столовойgithub.com/Geekhyt, Добро пожаловать в кафетерий. Если вы считаете, что еда и вино вкусные, Звезда станет отличным поощрением для владельца кафетерия.
ECMAScript
ECMAScript
даEcma InternationalОбнародован языковой стандарт под номером 262, также известный какECMA-262
.
Ecma International
Это организация, разрабатывающая международные стандарты в области информационных и коммуникационных технологий, ранее известная как Европейская ассоциация производителей компьютеров (European Computer Manufacturers Association
), с интернационализацией компьютеров название учреждения было изменено на его английскую аббревиатуру.
ECMAScript
Зависит отEMCA International
изTC39(Technical Committee 39
) Подготовлено Техническим комитетом.
TC39
будет написаноECMAScript
Стандартные документы, представляемыеEcma International
, и официально выпущен им.
С 2015 годаECMAScript
Официальная версия выпускается каждый год, и год написан в названии, например「ECMAScript® 2020 Language Specification, 11th edition」
, что может быть сокращено какES2020
илиES11
.
пять стадий процесса
Если вы хотите добавить или переписать спецификацию, вам обычно нужно пройти 5 этапов, таких какTC39 ProcessПоказано в:
- Strawperson
- Proposal
- Draft
- Candidate
- Finished
После этих 5 этапов модификации, которые перейдут в состояние Finished, будут включены в официальную версию спецификации.
ECMAScript2021
понялECMAScript
, давайте введем текст ниже, давайте посмотрим на выявленные новые возможности ECMAScript2021.
1.String.prototype.replaceAll
Давайте рассмотримString.prototype.replace
Применение:
const str = 'Stay Hungry. Stay Foolish.'
const newStr = str.replace('Stay', 'Always')
console.log(newStr) // Always Hungry. Stay Foolish.
Если мы напишем так, то будет заменено только первое совпадение.
Чтобы сделать все замены, вам нужно использовать регулярные выражения.
const str = 'Stay Hungry. Stay Foolish.'
const newStr = str.replace(/Stay/g, 'Always')
console.log(newStr) // Always Hungry. Always Foolish.
Однако при использовании обычного, если требуется соответствие+
Равные символы должны быть экранированы. Такие как:
/\+/g
Если вы сообразительны, вы можете придумать другое решение: использоватьsplit + join
Путь
Вот официальный пример:
const queryString = 'q=query+string+parameters';
const withSpaces = queryString.split('+').join(' ');
// q=query string parameters
Но это также снижает производительность, плюс эта операция очень распространена. Так он родилсяString.prototype.replaceAll
Этот API, мы можем работать более удобно.
const str = 'Stay Hungry. Stay Foolish.'
const newStr = str.replaceAll('Stay', 'Always')
console.log(newStr) // Always Hungry. Always Foolish.
String.prototype.replaceAll(searchValue, replaceValue)
Примечание: когдаsearchValue
является неглобальным регулярным выражением,replaceAll
вызовет исключение. еслиsearchValue
глобальное регулярное выражение,replaceAll
а такжеreplace
Поведение последовательное.
2.Promise.any
const p = Promise.all([p1, p2, p3]);
-
Promise.all
(ES2015) p выполняется только тогда, когда состояние каждого входящего экземпляра Promise (p1, p2, p3) становится выполненным, и пока один из (p1, p2, p3) отклонен, состояние p становится отклоненным. -
Promise.race
(ES2015) Когда один из входящих экземпляров Promise (p1, p2, p3) сначала изменяет состояние, тогда соответственно изменяется состояние p, то есть возвращается возвращаемое значение первого измененного экземпляра Promise. -
Promise.allSettled
(ES2020) Экземпляр упаковки не завершится, пока все входящие экземпляры Promise (p1, p2, p3) не вернут результаты, независимо от того, выполнены они или отклонены. -
Promise.any
(ES2021) Когда любое из обещаний выполнено, вернуть обещание, которое уже имеет выполненное значение. Если все обещания отклонены, вернуть отклоненное обещание.
Контрастная память
- мы можем поставить
Promise.any()
понимается какPromise.all()
обратная операция.
Приветствую Бога Вэй!
-
Promise.any()
а такжеPromise.race()
Методы очень похожи, с одним отличием: первый неPromise
сталиrejected
статус заканчивается.
Для получения дополнительной информации см. Введение г-на Руана в ECMAScript 6.
Promise.any(promises).then(
(first) => {
// 任何一个Promise完成
},
(error) => {
// 所有的 Promise都拒绝了
}
)
происхождение любого имени
any Как следует из названия, он не только четко описывает свою функцию, но и так называется в сторонних библиотеках, предоставляющих эту функцию.Студенты, которые его использовали, должны чувствовать себя очень дружелюбно.
- GitHub.com/Kris KO WA out/Пожалуйста…
- Bluebird находится по адресу .com/docs/API/cheat…
- GitHub.com/no 0 подняться/про…
- GitHub.com/ предназначен для продвижения о / я ...
- Github.com/sin of red или fox ...
предсказуемый эффект
Чиновник приводит пример, который можно применитьPromise.any()
Проверьте, какой сайт является самым быстрым для доступа.
Promise.any([
fetch('https://v8.dev/').then(() => 'home'),
fetch('https://v8.dev/blog').then(() => 'blog'),
fetch('https://v8.dev/docs').then(() => 'docs')
]).then((first) => {
// Any of the promises was fulfilled.
console.log(first);
// → 'home'
}).catch((error) => {
// All of the promises were rejected.
console.log(error);
});
3.WeakRefs
Примечание: старайтесь избегать использованияWeakRef
а такжеFinalizationRegistry
, механизм сборки мусора зависит от реализации движка JavaScript, которая может быть разной для разных движков или разных версий движка.
Это предложение в основном включает две основные новые функции:
- использовать
WeakRef
Слабые ссылки на объекты, созданные классом - использовать
FinalizationRegistry
Класс запускает определяемый пользователем финализатор после того, как объект будет удален сборщиком мусора.
Их можно использовать по отдельности или вместе.
WeakRef
Экземпляры не блокируют коллекции GC, но GCEventLoop
переработка междуWeakRef
пример.GC
после переработкиWeakRef
примерderef()
метод вернет undefined
.
let ref = new WeakRef(obj)
let isLive = ref.deref() // 如果 obj 被垃圾回收了,那么 isLive 就是 undefined
FinalizationRegistry
регистрCallback
, вызываемый после того, как сборщик мусора восстанавливает объект.
const registry = new FinalizationRegistry(heldValue => {
// ....
});
// 通过 register 注册任何你想要清理回调的对象,传入该对象和所含的值
registry.register(theObject, "some value");
Для более подробной информации вы можете прочитать:
4. Логические операторы присваивания
Давайте рассмотримES2020
Новый оператор объединения null??
Когда левый операндundefined
илиnull
, оператор присваивает правый операнд левой переменной.
const name = null ?? '前端食堂'
console.log(name) // 前端食堂
С помощью логического оператора присваивания мы можем заменить старый способ записи:
const demo = function() {
// 旧的写法1
// if (!a) {
// a = '西瓜'
// }
// 旧的写法2
// a = a || '西瓜'
// 新的写法
a ||= '西瓜'
}
a ||= b; // 等同于 a || (a = b);
a &&= b; // 等同于 a && (a = b);
a ??= b; // 等同于 a ?? (a = b);
5.Числовые разделители
Читабельность чисел ухудшается по мере того, как числа становятся длиннее, а разделители чисел делают длинные числа более разборчивыми.
const x = 1000000000000
const y = 1_000_000_000_000
console.log(x === y) // true
Доступен в двоичном, шестнадцатеричном, BigInt и т. д.
❤️Любовное тройное комбо
1. Если вы считаете, что еда и напитки в столовой все еще аппетитны, просто поставьте лайк и поддержите это, вашеотличныймоя самая большая мотивация.
2. Подпишитесь на официальный аккаунтФронтальная столовая,Ешьте каждый прием пищи!
3. Нравится, комментирует, пересылает === призывает больше!