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 .

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