3

Características del ECMAScript 6+

img-ilustrativa.jpg

ECMAScript 6 (2015)

ECMAScript es el estándar que define cómo debe de ser el lenguaje Javascript. Incluyó bastante novedades y actualizaciones respecto a sus versiones anteriores. En cada sección se ilustrará como se realizaba antes del ES6 y como se debe de realizar con el estandar actual.

<h3>Parámetros por defecto</h3>

Los parámetros por defecto (default params) son aquellos valores que se le envian a una función en caso de que al ser invocada no se le especifique algún parámetro.

→ Antes ES6

functionnewFunction(name, age, country) {
	var name = name || 'Alex';
	var age = age || 26;
	var country = country || 'MX'console.log(name, age, country);
}

→ ES6

functionnewFunction2(name = 'Alex', age = 26, country = 'MX') {
	console.log(name, age, country);
}

Como podemos ver el código se vuelve más simple y limpio.

<h3>Template literals</h3>

Los template literals fueron introducidos también dentro del ES6 y es una forma más intuitiva de concatenar valores.

→ Antes ES6

let hello = "Hello";
let world = "World";

let epicPhrase = hello + ' ' + world + '!';

→ ES6

let epicPhrase2 = `${hello}${world}!`;
<h3>Multilinea</h3>

La multilinea es una caracteristica introducida en el ES como parte de las facilidades que traen los template literals.

→ Antes ES6

let lorem = 'Lorem ipsum dolor sit amet. \n' + 'Praesentium, nesciunt!';

→ ES6

let lorem2 = `Lorem ipsum dolor sit amet.
Praesentium, nesciunt!`
<h3>Desestructuración de objetos</h3>

La desestructuración de objetos nos permite obtener los valores de los objetos de una forma más sencilla y sin utilizar la notación de punto.

→ Antes ES6

let person = {
	'name': 'Alex',
	'age': 32,
	'country': 'MX'
}
console.log(person.name, person.age, person.country);

→ ES6

let { name, age, country } = person;
console.log(name, age, country);
<h3>Operador de propagación</h3>

Este operador, mejor conocido como spread fue introducido en el ES6 como nueva caracteristica. Nos permite ‘expandir’ varios elementos cuando por ejemplo tenemos elementos en arreglos y buscamos unirlos en uno solo.

→ ES6

let team1 = ['Alex', 'Oscar', 'Manuel'];
let team2 = ['Valeria', 'Mariana', 'Camila'];

// ES6let education = ['David', ...team1, ...team2];
console.log(education);
<h3>Let y const</h3>

Let y const son dos formas nuevas de declarar variables y constantes, dejando de lado el uso de var. Donde let tiene un scope local y de bloque al igual que const que además actua como constate a la que no se le puede reasignar un valor.

→ ES6

{ var globalVar = "Global Var"; }

{
	// ES6let globalLet = 'Global Let';
	console.log(globalLet);
}

console.log(globalVar);

// Const, cannot be reassignedconst HELLO = 'Hello World!';
<h3>Objetos</h3>

Una de las caracteristicas de los objetos dentro del ES6 es la manera en que se simplifico la asignación de valores.

→ Antes ES6

let name = 'Alex';
let age = 26;

obj = { 
	name: name, 
	age: age
};

→ ES6

obj2 = { name, age };
<h3>Funciones de flecha</h3>

Las funciones de flecha son una forma más elegante de escribir funciones anónimas.

→ Antes ES6

const NAMES = [
	{name: 'Alex', age: 26},
	{name: 'Matty', age: 24}
]

let listOfNames = NAMES.map(function(item) {
	console.log(item.name);
});

→ ES6

let listOfName2 = NAMES.map((item) => {
	console.log(item.age);
});
<h3>Promesas</h3>

Las promesas fueron introducidas en el ES6 para mejorar el asincronismo en javascript y como una solución al callback hell.

→ ES6

const helloPromise = () => {
	returnnewPromise((resolve, reject) => {
		if (true) {
			resolve('Hey!');
		} else {
			reject('Ups!!');
		}
	});
}

helloPromise()
	.then(response => {
		console.log(response);
	})
	.catch(error => {
		console.log(error);
	})
<h3>Clases</h3>

Las clases vinieron a mejorar la sintaxis de los prototipos y es una forma que implementó javascript para poder manejar la herencia como hacen otros lenguajes.

→ ES6

classcalculator{
	constructor() {
		this.valueA = 0;
		this.valueB = 0;
	}

	add(valueA, valueB) {
		this.valueA = valueA;
		this.valueB	= valueB;
		returnthis.valueA + this.valueB;
	}
}

const calc = new calculator();
console.log(calc.add(2,2));;
<h3>Modulos</h3>

Los módulos nos permiten segmentar nuestro código en diferentes archivos y poderlos trabajar en conjunto, haciendo la lógica de nuestra aplicación más ordenada.

→ ES6

Archivo [module.js]

const hello = () => {
	return'Hello!';
}

exportdefault hello;

Archivo [index.js]

import { hello } from'./module';
console.log(hello());
<h3>Generadores</h3>

Los generadores llegaron a complementar a los iteradores ya que permiten definir un algoritmo iterativo al escribir una sola función que puede mantener su propio estado.

function* helloWorld() {
	if (true) {
		yield'Hello, ';
	}
	if (true) {
		yield'World';
	}
};

const generatorHello = helloWorld();
console.log(generatorHello.next().value);
console.log(generatorHello.next().value);

ECMAScript 7 (2016)

<h3>Includes</h3>

El método includes nos ayuda a determinar si un array incluye un elemento determinado, nos retorna true o false dependiendo si lo encontró o no.

→ ES7

let numbers = [1, 2, 3, 7, 8];

if (numbers.includes(7)) {
	console.log('Found Value');
} else {
	console.log('Not found');
}
<h3>Potencia</h3>

→ ES7

Esta revisión de javascript incluyó un nuevo operador para realizar el cáclulo de una potencia.

let base = 4;
let exponent = 4;
let result = base ** exponent
console.log(result);

ECMAScript 8 (2017)

<h3>Object entries</h3>

Esta caracteristica del ES8 nos permite devolver la clave y valores de un objeto en forma de matríz.

→ ES8

const data = {
	frontend: 'Alex',
	backend: 'Samuel',
	design: 'Mariana'
}

const entries = Object.entries(data);
console.log(entries);
console.log(entries.length);
<h3>Object values</h3>

A diferencia de la anterior, esta característica nos permite los valores del objeto en forma de arreglo.

→ ES8

const data = {
	frontend: 'Alex',
	backend: 'Samuel',
	design: 'Mariana'
}

const values = Object.values(data);
console.log(values);
<h3>Padding</h3>

El paddin en javascript nos permite añadir valores a una cadena de texto, ya sea al inicio al final de esta.

→ ES8

const string = 'Hello';
let maxLength = 8;
let addStart = 'Hi ';
let addEnd = "!!!"console.log(string.padStart(maxLength, addStart));
console.log(string.padEnd(maxLength, addEnd));
<h3>Async Await</h3>

El async y await complementan el uso de las promesas.

→ ES8

const helloWorld = () => {
	returnnewPromise((resolve, reject) => {
		(true) 
			? setTimeout(() => resolve('Hello World!'), 3000)
			: reject(newError('Test error'));
	});
};

const helloAsync = async () => {
	const hello = await helloWorld();
	console.log(hello);
};

Esta característica incluye el correcto manejo de errores en las promesas, que sería haciendo uso del try-catch.

const anotherFunction = async () => {
	try {
		const hello = await helloWorld();
		console.log(hello);
	} catch (err) {
		console.log(err);
	}
}

ECMAScript 9 (2018)

<h3>Operador de propagación</h3>

El operador spread recibió mejoras en el ES9 ahora nos permite utilizarlo dentro de los objetos.

→ ES9

const obj = { name: 'Alex', age: 26, }

const obj1 = {
	...obj,
	country: 'MX',
}

console.log(obj1);
<h3>Promise Finally</h3>

Se añade una nueva caracteristica a las promesas y es el .finally que se ejecuta cuando la promesa ya acabo su ejecución, sin importar si fue resuelta o no.

→ ES9

// Promise finallyconst helloWorld = () => {
	returnnewPromise((resolve, reject) => {
		(true)
			? resolve('Hello World!')
			: reject(newError('Test error'));
	});
};

helloWorld()
	.then(response => console.log(response))
	.catch(error => console.log(error))
	.finally(() => console.log('Promise end'));
<h3>Match con Regex</h3>

Los regex nos permiten comprarar si una dato cumple con un patrón, en esta actualización del estándar se incluyó el método .match que nos permite obtener los valores de la cadena separando los elementos.

→ ES9

const regexData = /([0-9]{4})-([0-9]{2})-([0-9]{2})/;
const match = regexData.exec('2020-04-20');
const year = match[1];
const month = match[2];
const day = match[3];

console.log(year, month, day);

ECMAScript 10 (2019)

<h3>Array flat</h3>

Esta característica nos permite volver un arreglo de N dimensiones de una sola.

→ ES10

let array = [1, 2, 3, [1, 2, 3, [1, 2, 3]]];
let depth = 2;
console.log(array.flat(depth));
<h3>Array flatMap</h3>

FlatMap nos permite manipular los datos dentro del arreglo.

→ ES10

let array = [1, 2, 3, 4, 5];
console.log(
	array.flatMap( value =>
		[value, value * 2]
	)
);
<h3>Trim</h3>

El método .trim nos permite remover los espacios en blanco de una cadena de texto, en esta especificación del estandar se añadieron los métodos .trimStart y .trimEnd para manipular especificamente el inicio o fin de una cadena de texto.

→ ES10

// trim startlet hello = '           hello world!';
console.log(hello);
console.log(hello.trimStart());

// trim endlet hello = 'hello world!           ';
console.log(hello);
console.log(hello.trimEnd());
<h3>From Entries</h3>

Nos permite convertir arrays a un objeto. Es la caracteristica inversa de entries.

→ ES10

let entries = [["name", "Alex"], ["age", 26]];
console.log(Object.fromEntries(entries));

Pueden encontrar también todos los códigos ejemplos y resumen de este curso en el siguiente repositorio. GitHub

Escribe tu comentario
+ 2