Rok 2018 wprowadza kilka naprawdę ciekawych nowości. Zapraszam na kolejną część od ES6 do ESNext – Nowości w ES9!

Rest/Spread Properties

ES6 wprowadził destruktywne przypisanie oraz przy pracy z tablicami, oraz rozłożenie tablicy na pojedyncze elementy przez trzy kropki (np. …array). ES9 wprowadza to samo, ale dla obiektów. Przykład:

const { a, b, ...others } = { a: 1, b: 2, c: 3, d: 4, e: 5 }
console.log(a) // 1
console.log(b) // 2
console.log(others) // { c: 3, d: 4, e: 5 }

const tab = { a, b, ...others };
console.log(tab) // { a: 1, b: 2, c: 3, d: 4, e: 5 }

Asynchronous iteration

Nowa konstrukcja for-await-of pozwala nam w pętli for-of dodać czekanie na zapytanie asynchroniczne. Konstrukcja używa await, więc może być użyta tylko w funkcji async:

for await (const data of getData()) {
  console.log(data)
}

Promise.prototype.finally()

Kiedy promise jest skończony poprawnie, odpala się funkcja then(). Jeżeli podczas wykonania był jakiś błąd, then() zostanie pominięte i promise przejdzie do funkcji catch(). Funkcja finally() jest funkcją, która się wykonuje po then() lub catch(), czyli niezależnie czy promise wykonał się poprawnie, czy nie.

getData(url)
  .then(data => console.log(`data - ${data}`)
  .catch(error => console.error(error))
  .finally(() => console.log('close'))

Regular Expression improvements

ES9 wprowadza wiele nowości do wyrażeń regularnych. Najciekawsze, to:

?= – pozwala sprawdzić, czy dany string występuje po innym stringu:

/Hello(?=World)/

/Hello(?=World)/.test(‘Hello friend’) //false
/Hello(?=World)/.test('Hello. I like create Hello World apps’') //true

?! – przeciwieństwo poprzedniego, pozwala sprawdzić, czy dany string NIE występuje po innym stringu:

/Hello(?=World)/

/Hello(?=World)/.test(‘Hello friend’) //true
/Hello(?=World)/.test('Hello. I like create Hello World apps’') //false

przechwytywanie grup – ES9 pozwala na przechwytywanie grup i późniejsze łatwiejsze ich używanie:

const test = /(?<number1>\d{3})-(?<number2>\d{3})-(?<number3>\d{3})/
const result = test.exec(‘555-666-777’)

// result.groups.number1 === '555';
// result.groups.number2 === '666';
// result.groups.number3 === '777';

s flag – pozwala zbadać, czy wyrażenie jest w jednej linii:

/hello.world/.test('hello\nworld') // false
/hello.world/s.test('hello\nworld') // true

Podsumowanie

Jak widzisz, nowości nie są wielkie, za to bardzo ciekawe. Praca na wyrażeniach regularnych zawsze była, przynajmniej dla mnie, dosyć trudna, więc uproszczenia w niej są naprawdę super. A już w kolejnym wpisie zobaczymy, co powstanie w ESNext!