ES2018: Javascript jaunās funkcijas 2018. gadā

Mūsu draugi no TC39 ir izlaiduši jaunus atjauninājumus mūsu iemīļotajai JavaScript valodai.

Ja vēlaties sekot līdzi jauno izlaidumu procesam, varat piekļūt šai saitei. Apstiprināšanas un izmaiņu veikšanas process iziet piecus posmus:

  • 0. posms: Strawman - atļaut ievadi specifikācijā
  • 1. posms: priekšlikums - izvirziet piemēru pievienošanai; Aprakstiet šķīduma formu; Nosakiet iespējamās problēmas
  • 2. posms: melnraksts - precīzi aprakstiet sintaksi un semantiku, izmantojot oficiālu spec valodu
  • 3. posms: kandidāts - norādiet, ka tālākai pilnveidošanai būs nepieciešamas atsauksmes no ieviešanas un lietotājiem
  • 4. posms: Pabeigts - norādiet, ka papildinājums ir gatavs iekļaušanai oficiālajā ECMAScript standartā

Sīkāka informācija ir redzama šeit. Ja vēlaties uzzināt vairāk par iepriekšējām izmaiņām, apskatiet ES6, ES7 un ES8.

Apskatīsim, ko viņi ir pievienojuši vai atjauninājuši pagājušajā gadā:

1. Daudz Regex izmaiņu

Mums ir četras regex modifikācijas. Apskatīsim tos:

s( dotAll) karodziņš parastajām izteiksmēm

Izmantojot regulāras izteiksmes, jūs domājat, ka punkts .sakrīt ar vienu rakstzīmi, taču tas ne vienmēr ir taisnība. Viens izņēmums ir ar līnijas terminatora rakstzīmēm:

/hello.bye/.test('hello\nbye') // prints false

Risinājums ir jaunais karogs (-i) (no vienas līnijas):

/hello.bye/s.test('hello\nbye') // prints true

RegExp nosauktās uztveršanas grupas

Šis ir vecais veids, kā iegūt gadu, mēnesi un dienu no datuma:

const REGEX = /([0-9]{4})-([0-9]{2})-([0-9]{2});const results = REGEX.exec('2018-07-12');console.log(results[1]); // prints 2018console.log(results[2]); // prints 07console.log(results[3]); // prints 12

Un, ja jūs strādājat ar ilgu regex, jūs zināt, cik grūti ir izsekot grupām, iekavām un rādītājiem. Izmantojot jauno nosaukto uztveršanas grupu, ir iespējams:

const REGEX = /(?[0-9]{4})-(?[0-9]{2})-(?[0-9]{2});const results = REGEX.exec('2018-07-12');console.log(results.groups.year); // prints 2018console.log(results.groups.month); // prints 07console.log(results.groups.day); // prints 12

RegExp Paskaties aiz apgalvojumiem

Pret apgalvojumiem ir divas versijas: pozitīvs un negatīvs.

a) pozitīvs (? < =…)

'$foo #foo @foo'.replace(/(?<=#)foo/g, 'XXX')// prints $foo #XXX @foo

Šis (?<=#)foo / g regex saka, ka vārdam jāsākas ar #, un tas neveicina kopējo saskaņoto virkni (tātad tas neaizstās # rakstzīmi).

b) Negatīvs (? < !…)

'$foo #foo @foo'.replace(/(?
    

On the contrary, this assertion guarantees that it doesn't start with #.

RegExp Unicode Property Escapes

Now we can search for characters by mentioning their Unicode character property inside of \p{}

/\p{Script=Greek}/u.test('μ') // prints true

You can check out more of the properties by clicking here.

2. Rest/Spread Properties

The rest operator (...) copies the remaining property keys that were not mentioned. Let's look at an example:

const values = {a: 1, b: 2, c: 3, d: 4};const {a, ...n} = values;console.log(a); // prints 1console.log(n); // prints {b: 2, c: 3, d: 4}

3. Promise.prototype finally

This new callback will always be executed, if catch was called or not.

fetch('//website.com/files').then(data => data.json()).catch(err => console.error(err)).finally(() => console.log('processed!'))

4. Asynchronous Iteration

Finally!

Now we can use await on our loops declarations.

for await (const line of readLines(filePath)) { console.log(line);}

And these are all the changes from this year. Let’s wait to see what they will bring us next year.

If you enjoyed this article, be sure to like it give me a lot of claps — it means the world to the writer ? And follow me if you want to read more articles about Culture, Technology, and Startups.

Flávio H. de Freitas is an Entrepreneur, Engineer, Tech lover, Dreamer and Traveler. Has worked as CTO in Brazil, Silicon Valley and Europe.