Lo nuevo en JavaScript ES2019

Existe un procedimiento est谩ndar para las 煤ltimas versiones de Javascript y hay un comit茅 completo detr谩s de 茅l. En este art铆culo, hablar茅 sobre qui茅n toma decisiones sobre cualquier nueva especificaci贸n, cu谩l es el procedimiento y qu茅 hay de nuevo en ES2019 .

imagen

La especificaci贸n del lenguaje que controla JavaScript se llama ECMAScript . Hay un grupo llamado Comit茅 T茅cnico 39 [TC39] , que revisa cada especificaci贸n antes de la adopci贸n.

Cada cambio tiene lugar en etapas:

  • Etapa 0: Ideas
  • Etapa 1: Ofertas
  • Etapa 2: borradores
  • Etapa 3: candidatos
  • Etapa 4: finalizaci贸n / aprobaci贸n

Es probable que una funci贸n que alcanza la etapa 4 sea parte de la especificaci贸n del lenguaje.

Considere lo que se agrega a la especificaci贸n de acuerdo con ES2019.

Array.prototype. {Flat, flatMap}


Array.prototype.flat () le permite suavizar recursivamente matrices a una profundidad dada y devolver una nueva matriz.

Sintaxis: Array.prototype.flat (profundidad)
profundidad: el valor predeterminado es 1, use Infinity para suavizar todas las matrices anidadas.

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 () muestra cada elemento utilizando una funci贸n de visualizaci贸n y alinea el resultado con una nueva matriz. Esto es id茅ntico a la operaci贸n del mapa , seguido de una profundidad plana de 1.

Sintaxis: Array.prototype.flatMap (devoluci贸n de llamada)
devoluci贸n de llamada: una funci贸n que produce el elemento de una nueva matriz.

 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 hace lo contrario de Object.entries. Convierte una lista de pares clave-valor en un objeto.

Sintaxis: Object.fromEntries (iterable)
iteraci贸n: iteraci贸n como objetos de matriz o mapa que implementan el protocolo iterable .

 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 () elimina espacios al principio de una l铆nea, y trimEnd () elimina espacios al final de una l铆nea.

 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 

Encuadernaci贸n opcional


Antes de la nueva especificaci贸n, se requer铆a tener una variable de excepci贸n vinculada a una declaraci贸n catch . ES2019 lo hizo opcional.

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

Esta caracter铆stica es 煤til si desea ignorar por completo el error. La mejor pr谩ctica es considerar el manejo de errores.

Hay momentos en los que conoce un posible error que podr铆a funcionar al realizar operaciones. Y puede ignorar el manejo de capturas.

JSON 鈯 ECMAScript


Los caracteres de separador de l铆nea (U + 2028) y separador de p谩rrafo (U + 2029) ahora est谩n permitidos en literales de cadena. Anteriormente, se consideraban terminadores de cadena y arrojaban excepciones SyntaxError .

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

JSON.stringify bien formado


En lugar de puntos de c贸digo sustitutos no apareados que conducen a unidades de c贸digo UTF-16 individuales, ES10 los representa utilizando secuencias de escape JSON.

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

Function.prototype.toString


.toString () ahora devuelve fragmentos exactos de c贸digo fuente, incluidos espacios y comentarios.

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

Symbol.prototype.description


Una propiedad de solo lectura que devuelve una descripci贸n opcional del objeto Symbol :

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

Conclusi贸n


Hay muchas otras cosas interesantes, como m茅todos est谩ticos y privados y campos en clases, Legacy RegEx, etc. Es importante que el desarrollador monitoree la aparici贸n de nuevas tecnolog铆as, mejore las viejas y use esto en el trabajo.

Ser谩 煤til leer versiones anteriores: ES2015 ES2016 ES2017 ES2018

Source: https://habr.com/ru/post/439532/


All Articles