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