Novedades de JavaScript ES2019

Muchos de nosotros sabemos que existe un procedimiento estándar para las últimas versiones de Javascript y un comité detrás de eso. En esta publicación, explicaré quién hace la llamada final sobre cualquier nueva especificación, cuál es el procedimiento y qué hay de nuevo en ES2019.

La especificación del lenguaje que impulsa JavaScript se llama ECMAScript. Hay un equipo detrás de eso llamado Comité Técnico 39 [TC39] que revisa cada especificación antes de adoptarla .

Cada cambio pasa por un proceso con etapas de madurez.

  • Etapa 0: Ideas / Hombre de paja
  • Etapa 1: Propuestas
  • Etapa 2: Borradores
  • Etapa 3: candidatos
  • Etapa 4: Terminado / Aprobado

Una característica que llega a la Etapa 4 probablemente será parte de la especificación del idioma.

Profundicemos en las cosas que se agregan recientemente a la especificación en ES2019.

Array.prototype. {Flat, flatMap}

Array.prototype.flat()propuesto aplanar matrices de forma recursiva hasta el especificado depthy devuelve una nueva matriz.

Sintaxis :Array.prototype.flat(depth)

profundidad: valor predeterminado 1 , se utiliza Infinitypara aplanar 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()mapea cada elemento usando una función de mapeo y aplana el resultado en una nueva matriz. Es idéntica a la operación de MAP seguido de un flatde depth1.

Sintaxis: Array.prototype.flatMap(callback)

callback:function que produce un elemento del nuevo Array.

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

Object.fromEntries

Object.fromEntriesrealiza lo contrario de Object.entries. Transforma una lista de pares clave-valor en un objeto.

Sintaxis: Object.fromEntries(iterable)

iterable: un objeto similar Arrayu Mapo iterable que implementa 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 los espacios en blanco del principio de una cadena y trimEnd()elimina los espacios en blanco del final de una cadena.

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 de captura opcional

Antes de la nueva especificación, se requería tener una variable de excepción enlazada a una catchcláusula. ES2019 lo hizo opcional.

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

Esta función es útil cuando desea ignorar por completo el error. La mejor práctica es considerar la posibilidad de manejar un error.

Hay casos en los que conoce el posible error que podría desencadenarse en las operaciones. Puede ignorar el manejo del bloque de captura.

JSON ⊂ ECMAScript

Los símbolos de separador de línea (U + 2028) y separador de párrafo (U + 2029) ahora están permitidos en literales de cadena. Anteriormente, estos se trataban como terminadores de línea y generaban SyntaxErrorexcepciones.

// 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 emparejados que dan como resultado unidades de código UTF-16 únicas , ES10 los representa con secuencias de escape JSON.

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

Function.prototype.toString

.toString() ahora devuelve fragmentos exactos de texto de código fuente, incluidos espacios en blanco y comentarios.

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

Símbolo.prototipo.descripción

Propiedad de solo lectura que devuelve la descripción opcional de un Symbolobjeto:

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

Conclusión

TC39 mantiene aquí todas las próximas especificaciones que están en la etapa> 1 del proceso. Como desarrollador, es importante estar al tanto de lo que sucede. Surgen muchas más cosas interesantes , como métodos y campos estáticos y privados en las clases, Legacy RegE x, etc. Descubra todas las cosas nuevas que se encuentran en la etapa de propuesta aquí.

code = coffee + developer

Aquí hay algunos temas más interesantes:

  • Una descripción general rápida de los símbolos de JavaScript
  • Cómo adoptar una estrategia de ramificación de git
  • Introducción a Git Merge y Git Rebase: qué hacen y cuándo usarlos