
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 depth
y devuelve una nueva matriz.
Sintaxis :Array.prototype.flat(depth)
profundidad: valor predeterminado 1 , se utiliza Infinity
para 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 flat
de depth
1.
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.fromEntries
realiza lo contrario de Object.entries
. Transforma una lista de pares clave-valor en un objeto.
Sintaxis: Object.fromEntries(iterable)
iterable: un objeto similar Array
u Map
o 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 catch
clá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 SyntaxError
excepciones.
// 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 Symbol
objeto:
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