JavaScript становится лучше с каждым годом. В 2020 году был, ну, стандарт ES2020.
Для меня необязательная цепочка ?.
, нулевой оператор объединения ??
и string.matchAll
— три наиболее полезные функции ES2020 на практике. Я объясню, как использовать их с примерами в этом сообщении в блоге.
Необязательная цепочка с ?.
Необязательная цепочка проверяет, являются ли значения null
или undefined
перед доступом к их свойствам. Если да, возвращается undefined
.
Вы можете написать более лаконичный код с помощью .?
, заменив, например, x == null ? undefined : x.b
выражения. Он также может заменить другие шаблоны, такие как x && x.b
, и сделать их менее подверженными ошибкам. Это особенно полезно, когда у вас длинные цепочки.
Давайте посмотрим на пример:
const test = (example) => { console.log(example?.value) };
test({value: ".?"}); // .? test(null); // undefined (optional chaining) test(undefined); // undefined (optional chaining) test(true); // undefined (true.value is undefined) test(1); // undefined (1.value is undefined)
Нулевой оператор объединения ??
Оператор нулевого объединения оценивает, является ли его левая часть null
или undefined
, и в этом случае возвращает правую часть. Левая сторона возвращается, если она не null
или undefined
.
Как и необязательная цепочка, нулевой оператор объединения помогает писать менее подверженный ошибкам код. Он может заменить шаблон значения по умолчанию a = x || something
. Этот шаблон может привести к непредвиденным результатам, если x
является ложным, а не null
или undefined
.
Вот пример:
const test = (example) => { console.log(example ?? 'default') };
test("??"); // ?? test(null); // default (nullish coalescing) test(undefined); // default (nullish coalescing) test(false); // false - would be "default" with `||` test(0); // 0 - would be "default" with `||`
Сопоставление регулярного выражения с группами захвата с использованием string.matchAll
string.match
уже возвращает все совпадающие значения из регулярного выражения с глобальным флагом. Но может быть важно получить позиции совпадающих значений и даже их группы захвата. string.matchAll
— лучшее решение для этого варианта использования.
string.matchAll
возвращает итератор по всем совпадениям глобального регулярного выражения. Каждое совпадение содержит совпадающее значение, его позицию и совпадающие захваты.
Это особенно полезно в сочетании с именованными группами захвата:
const text = "Let's match one:1 and let's also match two:2."; const regexp = /match\s(?<word>\w+):(?<digit>\d)/g;
for (const match of text.matchAll(regexp)) { console.log(match); }
Приведенный выше пример кода имеет следующий вывод:
[
'match one:1',
'one', '1',
index: 6,
input: "Let's match one:1 and let's also match two:2.",
groups: { word: 'one', digit: '1' }
]
[
'match two:2',
'two',
'2',
index: 33,
input: "Let's match one:1 and let's also match two:2.",
groups: { word: 'two', digit: '2' }
]
2021 год не за горами. Благодаря трем вышеупомянутым функциям JavaScript вы можете сделать кодирование более приятным уже сегодня. В 2021 году вас ждет еще больше удивительных возможностей JS 🚀
Первоначально опубликовано на https://p42.ai.