ES2018: Javascriptin uudet ominaisuudet vuonna 2018

Ystävämme TC39: stä ovat julkaisseet uusia päivityksiä rakastetulle JavaScript-kielellemme.

Jos haluat seurata valiokunnan uusien julkaisujen prosessia, voit käyttää tätä linkkiä. Hyväksyntämenettely ja muutoksen tekeminen käyvät läpi viisi vaihetta:

  • Vaihe 0: Strawman - Salli syöttö määritykseen
  • Vaihe 1: Ehdotus - Tee lisäyksen tapaus; Kuvaa ratkaisun muoto; Tunnista mahdolliset haasteet
  • Vaihe 2: Luonnos - Kuvaa tarkasti syntaksia ja semantiikkaa muodollisen spesifisen kielen avulla
  • Vaihe 3: Ehdokas - Ilmoita, että tarkentaminen edellyttää palautetta toteutuksilta ja käyttäjiltä
  • Vaihe 4: Valmis - Ilmoita, että lisäys on valmis sisällytettäväksi viralliseen ECMAScript-standardiin

Lisätietoja on täällä. Jos haluat oppia lisää edellisistä muutoksista, tutustu ES6-, ES7- ja ES8-versioihin.

Katsotaan siis, mitä he ovat lisänneet tai päivittäneet kuluneen vuoden aikana:

1. Paljon Regex-muutoksia

Meillä on neljä muunnosta regexille. Katsotaanpa heidät:

s( dotAll) lippu säännöllisiä lausekkeita varten

Säännöllisiä lausekkeita käytettäessä oletat, että piste .vastaa yhtä merkkiä, mutta se ei aina ole totta. Yksi poikkeus on rivinvaihtomerkit:

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

Ratkaisu on uusi lippu (t) (singlelineestä):

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

RegExp-nimiset sieppausryhmät

Tämä on vanha tapa saada vuosi, kuukausi ja päivä päivämäärästä alkaen:

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

Ja jos työskentelet pitkän regexin kanssa, tiedät kuinka vaikeaa on seurata ryhmiä, sulkeita ja indeksejä. Uuden nimetyn sieppausryhmän avulla on mahdollista:

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 Katso väitteiden taakse

Väitteiden takana on kaksi versiota: positiivinen ja negatiivinen.

a) Positiivinen (? < =…)

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

Tämän (?<=#)foo / g-regeksin mukaan sanan on aloitettava # -merkillä, eikä se edistä yleisesti sovitettua merkkijonoa (joten se ei korvaa # -merkkiä).

b) Negatiivinen (? < !…)

'$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.