La guía ES2019

ECMAScript es el estándar en el que se basa JavaScript y, a menudo, se abrevia como ES. Descubra todo sobre ECMAScript y las funciones agregadas en ES2019

ESNext es un nombre que siempre indica la próxima versión de JavaScript.

La versión actual de ECMAScript esES2018. It was released in June 2018.

Históricamente, las ediciones de JavaScript se han estandarizado durante el verano, por lo que podemos esperarECMAScript 2019 to be released in summer 2019.

Por tanto, en el momento de redactar este artículo, se ha lanzado ES2018 yESNext es ES2019

Las propuestas al estándar ECMAScript se organizan en etapas. Las etapas 1-3 son una incubadora de nuevas características, y las características que llegan a la etapa 4 se finalizan como parte del nuevo estándar.

En el momento de escribir este artículo, tenemos una serie de funciones enStage 4. Los presentaré en esta sección. Las últimas versiones de los principales navegadores ya deberían implementar la mayoría de ellos.

  • Array.prototype.{flat,flatMap}
  • Encuadernación de captura opcional
  • Object.fromEntries()
  • String.prototype.{trimStart,trimEnd}
  • Symbol.prototype.description
  • Mejoras JSON
  • Bien formadoJSON.stringify()
  • Function.prototype.toString()

Algunos de esos cambios son principalmente para uso interno, pero también es bueno saber qué está pasando.

Hay otras características en la Etapa 3, que podrían promoverse a la Etapa 4 en los próximos meses, y puede consultarlas en este repositorio de GitHub:https://github.com/tc39/proposals.

Array.prototype.{flat,flatMap}

flat()es un nuevo método de instancia de matriz que puede crear una matriz unidimensional a partir de una matriz multidimensional.

Ejemplo:

['Dog', ['Sheep', 'Wolf']].flat()
//[ 'Dog', 'Sheep', 'Wolf' ]

De forma predeterminada, solo se "nivela" hasta un nivel, pero puede agregar un parámetro para establecer el número de niveles en los que desea nivelar la matriz. Ponlo enInfinitytener niveles ilimitados:

['Dog', ['Sheep', ['Wolf']]].flat()
//[ 'Dog', 'Sheep', [ 'Wolf' ] ]

['Dog', ['Sheep', ['Wolf']]].flat(2)
//[ 'Dog', 'Sheep', 'Wolf' ]

['Dog', ['Sheep', ['Wolf']]].flat(Infinity)
//[ 'Dog', 'Sheep', 'Wolf' ]

Si está familiarizado con JavaScriptmap()método de una matriz, usted sabe que al usarlo puede ejecutar una función en cada elemento de una matriz.

flatMap()es un nuevo método de instancia de Array que combinaflat()conmap(). Es útil cuando se llama a una función que devuelve una matriz en la devolución de llamada map (), pero desea que la matriz resultante sea plana:

['My dog', 'is awesome'].map(words => words.split(' '))
//[ [ 'My', 'dog' ], [ 'is', 'awesome' ] ]

['My dog', 'is awesome'].flatMap(words => words.split(' '))
//[ 'My', 'dog', 'is', 'awesome' ]

Encuadernación de captura opcional

A veces no necesitamos tener un parámetro enlazado al bloque catch de un try / catch.

Anteriormente teníamos que hacer:

try {
  //...
} catch (e) {
  //handle error
}

Incluso si nunca tuviéramos que usarepara analizar el error. Ahora podemos simplemente omitirlo:

try {
  //...
} catch {
  //handle error
}

Object.fromEntries()

Los objetos tienen unentries()método, ya queES2017.

Devuelve una matriz que contiene todas las propiedades propias del objeto, como una matriz de[key, value]pares:

const person = { name: 'Fred', age: 87 }
Object.entries(person) // [['name', 'Fred'], ['age', 87]]

ES2019 presenta un nuevoObject.fromEntries()método, que puede crear un nuevo objeto a partir de dicha matriz de propiedades:

const person = { name: 'Fred', age: 87 }
const entries = Object.entries(person)
const newPerson = Object.fromEntries(entries)

person !== newPerson //true

String.prototype.{trimStart,trimEnd}

Esta función ha sido parte de v8 / Chrome durante casi un año y se estandarizará en ES2019.

trimStart()

Devuelve una nueva cadena con un espacio en blanco eliminado del inicio de la cadena original

'Testing'.trimStart() //'Testing'
' Testing'.trimStart() //'Testing'
' Testing '.trimStart() //'Testing '
'Testing '.trimStart() //'Testing'

trimEnd()

Devuelve una nueva cadena con un espacio en blanco eliminado del final de la cadena original

'Testing'.trimEnd() //'Testing'
' Testing'.trimEnd() //' Testing'
' Testing '.trimEnd() //' Testing'
'Testing '.trimEnd() //'Testing'

Symbol.prototype.description

Ahora puede recuperar la descripción de unSímboloaccediendo a sudescriptionpropiedad en lugar de tener que utilizar latoString()método:

const testSymbol = Symbol('Test')
testSymbol.description // 'Test'

Mejoras JSON

Antes de este cambio, los símbolos de separador de línea (\ u2028) y separador de párrafo (\ u2029) no estaban permitidos en cadenas analizadas comoJSON.

UsandoJSON.parse(), esos personajes resultaron en unaSyntaxErrorpero ahora analizan correctamente, según lo definido por el estándar JSON.

Bien formadoJSON.stringify()

Corrige elJSON.stringify()salida cuando procesa puntos de código UTF-8 sustitutos (U + D800 a U + DFFF).

Antes de este cambio llamandoJSON.stringify()devolvería un carácter Unicode con formato incorrecto (una “�”).

Ahora esos puntos de código sustitutos se pueden representar de forma segura como cadenas usandoJSON.stringify(), y transformado de nuevo en su representación original utilizandoJSON.parse().

Function.prototype.toString()

Las funciones siempre han tenido un método de instancia llamadotoString()que devuelven una cadena que contiene el código de función.

ES2019 introdujo un cambio en el valor de retorno para evitar eliminar comentarios y otros caracteres como espacios en blanco, que representan exactamente la función tal como se definió.

Si anteriormente tuviéramos:

function /* this is bar */ bar () {}

El comportamiento fue este:

bar.toString() //'function bar() {}

ahora el nuevo comportamiento es:

bar.toString(); // 'function /* this is bar */ bar () {}'

Más tutoriales de js: