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.