de Vali Shah

Noutăți în JavaScript ES2019

Noutati in JavaScript ES2019

Mulți dintre noi știm că există o procedură standard pentru cele mai recente versiuni ale Javascript și un comitet în spatele acesteia. În această postare, voi explica cine face apelul final pentru orice specificație nouă, care este procedura pentru aceasta și ce este nou în ES2019.

Specificația de limbă care conduce JavaScript se numește ECMAScript. Există în spatele unei echipe numită Comitetul Tehnic 39 [TC39] care revizuiește fiecare specificație înainte de a adopta.

Fiecare schimbare trece printr-un proces cu etape de maturitate.

  • Etapa 0: Idei / Strawman
  • Etapa 1: Propuneri
  • Etapa 2: Proiecte
  • Etapa 3: Candidați
  • Etapa 4: Finalizat / Aprobat

O caracteristică care atinge Etapa 4 cel mai probabil va face parte din specificațiile lingvistice.

Să ne scufundăm în lucrurile care sunt adăugate recent în specificația din ES2019.

Array.prototip. {flat, flatMap}

Array.prototype.flat() s-a propus aplatizarea matricelor recursiv până la cele specificate depth și returnează o nouă matrice.

Sintaxă: Array.prototype.flat(depth)
adâncime – Valoare implicită 1, Utilizare Infinity pentru a aplatiza toate matricile imbricate.

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() mapează fiecare element folosind o funcție de mapare și aplatizează rezultatul într-o nouă matrice. Este identic cu operația de hartă urmată de un flat de depth 1.

Sintaxă: Array.prototype.flatMap(callback)
sună din nou: function care produce un element din noua matrice.

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 efectuează inversul Object.entries . Transformă o listă de perechi cheie-valoare într-un obiect.

Sintaxă: Object.fromEntries(iterable)
iterabil: Un tip iterabil Array sau Map sau obiecte care implementează protocol iterabil

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

String.prototip. {trimStart, trimEnd}

trimStart() elimină spațiul alb de la începutul unui șir și trimEnd() elimină spațiul alb de la capătul unui șir.

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

Opțional Catch Binding

Înainte de noua specificație, era necesar să existe o variabilă de excepție legată de a catch clauză. ES2019 a făcut-o opțională.

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

Această caracteristică este utilă atunci când doriți să ignorați complet eroarea. Cea mai bună practică este să luați în considerare gestionarea unei erori.

Există cazuri în care cunoașteți posibila eroare care ar putea declanșa operațiunile. Puteți ignora gestionarea blocurilor de captură.

JSON ⊂ ECMAScript

Simbolurile separator de linie (U + 2028) și separatorul de paragrafe (U + 2029) sunt acum permise în literele șirului. Anterior, aceștia erau tratați ca terminatori de linie și au avut ca rezultat SyntaxError excepții.

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

JSON bine format.stringify

În loc de puncte de cod surogat nepereche rezultând un singur UTF-16 unități de cod, ES10 le reprezintă cu secvențe de evacuare JSON.

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

Function.prototype.toString

.toString() returnează acum felii exacte de text al codului sursă, inclusiv spații albe și comentarii.

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

Simbol.prototip.descriere

Proprietate numai în citire care returnează descrierea opțională a unui Symbol Obiect:

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

Concluzie

TC39 păstrează toate specificațiile viitoare care se află în etapa> 1 a procesuluiss here. La fel de a developer, Este important să țineți la curent cu ceea ce se întâmplă în jur. Există multe alte lucruri interesante care vinke metode și câmpuri statice și private în clase, Legacy RegEx, etc. Aflați toate lucrurile noi care se află în stația de propunerege here.

code = coffee + developer

Iată câteva subiecte interesante: