A JavaScript ES2019 újdonságai

Sokan tudjuk, hogy a Javascript legújabb kiadásainak szabványos eljárása van, és ennek mögött egy bizottság áll. Ebben a bejegyzésben elmagyarázom, hogy ki kezdeményezi az utolsó specifikációt, mi az eljárása, és mi az új az ES2019-ben.

A JavaScriptet vezérlő nyelvi specifikációt ECMAScript-nek hívják . A 39. technikai bizottság [TC39] nevű csapat mögött minden specifikáció áttekintése az elfogadás előtt megtörténik .

Minden változás érettségi szakaszokkal rendelkező folyamaton megy keresztül.

  • 0. szakasz: Ötletek / Strawman
  • 1. szakasz: javaslatok
  • 2. szakasz: Piszkozatok
  • 3. szakasz: Jelöltek
  • 4. szakasz: Befejezve / jóváhagyva

A 4. szakaszba eljutó szolgáltatás valószínűleg a nyelv specifikációjának része lesz.

Merüljünk el azokban a dolgokban, amelyek újonnan kerültek az ES2019 specifikációjába.

Array.prototype. {Flat, flatMap}

Array.prototype.flat()javasolta a tömbök rekurzív simítását a megadottig, depthés új tömböt ad vissza.

Szintaxis :Array.prototype.flat(depth)

mélység - Alapértelmezett 1. érték , InfinityMinden beágyazott tömb ellapításához.

const numbers = [1, 2, [3, 4, [5, 6]]]; // Considers default depth of 1 numbers.flat(); > [1, 2, 3, 4, [5, 6]] // With depth of 2 numbers.flat(2); > [1, 2, 3, 4, 5, 6] // Executes two flat operations numbers.flat().flat(); > [1, 2, 3, 4, 5, 6] // Flattens recursively until the array contains no nested arrays numbers.flat(Infinity) > [1, 2, 3, 4, 5, 6]

Array.prototype.flatMap()minden elemet leképezési függvény segítségével térképez fel, és az eredményt egy új tömbbe simítja. Ez megegyezik a térkép művelettel, amelyet egy flata követ 1-vel követ depth.

Szintaxis: Array.prototype.flatMap(callback)

visszahívás:function ez létrehozza az új tömb elemét.

const numbers = [1, 2, 3]; numbers.map(x => [x * 2]); > [[2], [4], [6]] numbers.flatMap(x => [x * 2]); > [2, 4, 6]

Object.fromEntries

Object.fromEntriesa fordítottját hajtja végre Object.entries. A kulcs-érték párok listáját objektummá alakítja.

Szintaxis: Object.fromEntries(iterable)

iterable: Egy iterable mint Arrayvagy Mapvagy tárgyak végrehajtó iterable protokoll

const records = [['name','Mathew'], ['age', 32]]; const obj = Object.fromEntries(records); > { name: 'Mathew', age: 32} Object.entries(obj); > [['name','Mathew'], ['age', 32]];

String.prototype. {TrimStart, trimEnd}

trimStart()eltávolítja a szóközt a karakterlánc elejétől, és a trimEnd()szóközt a karakterlánc végétől.

const greeting = ` Hello Javascript! `; greeting.length; > 19 greeting = greeting.trimStart(); > 'Hello Javascript! ' greeting.length; > 18 greeting = 'Hello World! '; greeting.length; > 15 greeting = greeting.trimEnd(); > 'Hello World!' greeting.length; > 12

Opcionális fogáskötés

Az új specifikáció előtt megkövetelt, hogy egy kivétel változó legyen kötve egy catchzáradékhoz. Az ES2019 nem kötelezővé tette.

// Before try { ... } catch(error) { ... } // After try { ... } catch { ... }

Ez a szolgáltatás akkor hasznos, ha teljesen figyelmen kívül akarja hagyni a hibát. A legjobb gyakorlat a hiba kezelésének megfontolása.

Vannak olyan esetek, amikor ismeri a lehetséges hibákat, amelyek kiválthatják a műveleteket. Figyelmen kívül hagyhatja a fogási blokk kezelését.

JSON ⊂ ECMAScript

A sorelválasztó (U + 2028) és a szakaszelválasztó (U + 2029) szimbólumok most megengedettek a karakterláncokban. Korábban ezeket vonalvégzőként kezelték, és SyntaxErrorkivételeket eredményeztek .

// Produces invalid string before ES2019 eval('"\u2028"'); // Valid in ES2019 eval('"\u2028"');

Jól formált JSON.stringify

A nem párosított helyettesítő kódpontok helyett, amelyek egyetlen UTF-16 kódegységet eredményeznek, az ES10 azokat JSON menekülési szekvenciákkal ábrázolja.

JSON.stringify('\uD800'); > '" "' JSON.stringify('\uD800'); > '"\\ud800"'

Function.prototype.toString

.toString() most a forráskód szövegének pontos szeleteit adja vissza, beleértve a szóközöket és a megjegyzéseket.

function /* a comment */ foo () {} // Previously: foo.toString(); > 'function foo() {}' ^ no comment ^ no space // Now: foo.toString(); > 'function /* comment */ foo () {}'

Symbol.prototype.description

Csak olvasható tulajdonság, amely visszaadja az Symbolobjektum opcionális leírását :

Symbol('desc').toString(); > "Symbol(desc)" Symbol('desc').description; > "desc" Symbol('').description; > "" Symbol().description; > undefined

Következtetés

A TC39 itt tartja az összes közelgő specifikációt, amelyek a folyamat> 1-es szakaszában vannak. Fejlesztőként fontos, hogy folyamatosan figyeljük a körülöttünk zajló eseményeket. Sokkal több izgalmas dolog áll előttünk a statikus és privát módszerek és mezők számára az osztályokban, a Legacy RegE x stb.

code = coffee + developer

Itt van még néhány érdekes téma:

  • A JavaScript-szimbólumok rövid áttekintése
  • Hogyan fogadjuk el a git elágazási stratégiát
  • Bevezetés a Git Merge és a Git Rebase-be: mit csinálnak és mikor kell használni