
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 , Infinity
Minden 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 flat
a 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.fromEntries
a 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 Array
vagy Map
vagy 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 catch
zá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 SyntaxError
kivé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 Symbol
objektum 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