Kas naujo „JavaScript“ ES2019

Daugelis iš mūsų žino, kad naujausiems „Javascript“ leidimams taikoma standartinė procedūra, o už jos - komitetas. Šiame įraše paaiškinsiu, kas paskambina į paskutinę bet kurią naują specifikaciją, kokia yra jos procedūra ir kas naujo ES2019.

„JavaScript“ valdanti kalbos specifikacija vadinama ECMAScript. Už to vadinamo Techninio komiteto 39 [TC39] yra komanda, kuri, prieš priimdama, peržiūri visas specifikacijas .

Kiekvienas pokytis praeina procesą su brandos stadijomis.

  • 0 etapas: idėjos / „Strawman“
  • 1 etapas: pasiūlymai
  • 2 etapas: juodraščiai
  • 3 etapas: kandidatai
  • 4 etapas: baigta / patvirtinta

Funkcija, pasiekianti 4 etapą, greičiausiai bus kalbos specifikacijos dalis.

Pasinerkime į dalykus, kurie naujai įtraukti į specifikaciją pagal ES2019.

Masyvas.prototipas. {Plokščias, plokščiasŽemėlapis}

Array.prototype.flat()pasiūlė išlyginti masyvus rekursyviai iki nurodyto depthir grąžina naują masyvą.

Sintaksė :Array.prototype.flat(depth)

gylis - numatytoji vertė 1 , naudokite, Infinitykad išlygintumėte visus įdėtus masyvus.

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()susieja kiekvieną elementą naudodamas žemėlapio funkciją ir sulygina rezultatą į naują masyvą. Tai identiška žemėlapio operacijai, po kurios eina a flatdepth1.

Sintaksė: Array.prototype.flatMap(callback)

atgalinis skambutis:function sukuria naujo masyvo elementą.

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

Object.fromEntries

Object.fromEntriesatlieka atvirkštinį Object.entries. Tai paverčia raktų ir reikšmių porų sąrašą į objektą.

Sintaksė: Object.fromEntries(iterable)

iterable: iterable like Arrayarba Maparba objektai, įgyvendinantys iterable protokolą

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()pašalina tarpą nuo eilutės pradžios ir trimEnd()tarpą nuo eilutės pabaigos.

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

Pasirenkamas laimikio įrišimas

Prieš naująją specifikaciją reikėjo, kad išimtinis kintamasis būtų susietas su catchsąlyga. ES2019 padarė jį neprivalomu.

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

Ši funkcija yra naudinga, kai norite visiškai nepaisyti klaidos. Geriausia praktika - apsvarstyti galimybę tvarkyti klaidą.

Yra atvejų, kai žinote galimą klaidą, kuri gali sukelti operacijas. Galite nepaisyti gaudymo blokų tvarkymo.

JSON ⊂ ECMAScript

Eilutės skiriamojo elemento (U + 2028) ir pastraipos skyriklio (U + 2029) simboliai dabar yra leidžiami eilutės pažodžiuose. Anksčiau jie buvo traktuojami kaip linijos terminatoriai, todėl buvo padarytos SyntaxErrorišimtys.

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

Gerai suformuotas JSON.stringify

Vietoj nesuporuotų pakaitinių kodų taškų, gaunančių pavienius UTF-16 kodo vienetus, ES10 juos vaizduoja su JSON pabėgimo sekomis.

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

Function.prototype.toString

.toString() dabar pateikia tikslius šaltinio kodo teksto gabalėlius, įskaitant tarpus ir komentarus.

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

Simbolis.prototipas.aprašymas

Tik skaitymo ypatybė, pateikianti pasirenkamą Symbolobjekto aprašymą :

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

Išvada

TC39 čia saugo visas būsimas specifikacijas, kurios yra> 1 proceso etape. Kaip kūrėjui svarbu stebėti skirtingus dalykus apie tai, kas vyksta aplink. Yra daug daugiau įdomių dalykų kuriant statinius ir asmeninius metodus bei laukus klasėse, „Legacy RegE x“ ir kt. Čia rasite visų naujų dalykų, kurie yra pasiūlymo etape.

code = coffee + developer

Čia yra dar kelios įdomios temos:

  • Greita „JavaScript“ simbolių apžvalga
  • Kaip priimti „GIT“ šakojimo strategiją
  • „Git Merge“ ir „Git Rebase“ įvadas: ką jie daro ir kada juos naudoti