Primero que nada luego de llevar tiempo sin publicar vengo a redactar la siguiente entrada ya que veo muchas dudas respecto a lo que son las novedades de JavaScript. Aún veo mucho código que no utilizan let o const para definir variables de forma correcta (al menos no como se debería) siendo que ES6 ya viene siendo soportado en todos los navegadores modernos. Lo primero es hablar con poco de ECMA
¿Qué es ECMA?
ECMA (European Computer Manufacturers Association) es una organización que se dedica a definir estándares a nivel nacional e internacional.
Entonces... ¿Qué es ECMAScript?
ECMAScript es la especificación que esta organización ha publicado con el fin de estandarizar JavaScript.
Sabiendo esto vamos a comenzar a ver las pequeñas diferencias entre ES5 y ES6, comenzando por las clases:
// ES5 function Persona(nombre, apellido, edad) { this.nombre = nombre; this.apellido = apellido; this.edad = edad; } Persona.prototype.cambiarEdad = function(nuevaEdad) { this.edad = nuevaEdad; } // ES6 class Persona { constructor(nombre, apellido, edad) { this.nombre = nombre; this.apellido = apellido; this.edad = edad; } cambiarEdad(nuevaEdad) { this.edad = nuevaEdad; } }
Aunque la funcionalidad sigue siendo la misma, es más fácil leer el código de esta forma, ahora sigamos con las variables....
¿Let, Const o Var?
Anteriormente había explicado el ámbito y contexto de variables (no entrare mucho en detalle por lo que te recomiendo leer la entrada), en vista de como funciona el ámbito dentro de este lenguaje (Scope) se ha cambiado la forma en que estas variables funcionan dentro de los bloques, por ejemplo....
for (....) { let foo = "valor"; var bar = "valor"; } console.log(foo); //muestra: undefined console.log(bar); //muestra: valor
Con esto sabemos que let esta diseñado para que el interprete busque esa variable únicamente dentro del bloque correspondiente, por lo que siempre que podamos debemos utilizar let (variable local) en vez de var (variable global), y aún así si queremos utilizar una variable en todo el bloque pudiéramos hacerlo de la siguiente forma:
let foo = 20; function test() { console.log(foo); } test();
Por otra parte tenemos const, esto es unicamente para una variable que no será redefinida en ninguna parte del código y que también es accesible dentro del bloque definido, un ejemplo muy especifico es el valor de Pi:
const PI = 3.14; PI = 123; //Error al sobre-escribir variable constante alert(PI);
Funciones Arrow
Este quizás es uno de los cambios mas significativos y más notorios dentro del ECMAScript, las Funciones Arrow (o funciones de flecha) no son más que funciones anónimas que no se relacionan con métodos y no pueden ser utilizadas en constructores (como clases). Básicamente es una forma corta de definir una función (OJO: no son un reemplazo para definir functiones, más en StackOverflow). Por ejemplo:
// De forma tradicional function saludar() { alert("Hola Mundo!"); } saludar(); // Utilizando una variable let saludar = function() { alert("Hola Mundo!"); }; saludar(); // Ahora como una función arrow saludar = () => { alert("Hola Mundo!"); }; saludar(); // También pudiéramos utilizar parámetros saludar = nombre => { alert("Hola, " + nombre); }; saludar("Mundo"); // Los paréntesis son requeridos si vamos a utilizar varios parámetros saludar = (nombre, apellido) => { alert("Hola, " + nombre + " " + apellido); }; saludar("Carlos", "Martínez");
Operador de Propagación (...)
Si (Spread Operator), esos 3 puntos que vemos como parámetros en una función, esto no es más que una forma rápida de definir un array de valores, básicamente estamos definiendo una función con múltiples argumentos, por ejemplo:
// Como acostumbramos function mostrarArray(array) { alert(array); } mostrarArray([1,2,3]); // Utilizando el Operador mostrarArray = (...array) => { alert(array); }; mostrarArray(1, 2, 3);
Array Helpers
Esto es algo que deberiamos utilizar mas seguido ya que nos facilita mucho a la hora de recorrer un array o mapear objetos, por ejemplo, para un simple bucle for/forEach:
// Tipico forEach var array = [1, 2, 3, 4]; for (var i = 0; i < array.length; i++) { console.log(array[i]); } // De forma simple const array = ["manzana", "pera", "banana"]; array.forEach((fruta) => console.log(fruta)); // Utilizando la función como referencia const items = (item) => { console.log(item) }; // Función Arrow array.forEach(items); // ES6 for (const [i, item] of array.entries()) { console.log('%d: %s', i, item); }
También tenemos map, lo cual nos ayuda al momento de mapear un objeto y obtener propiedades especificas, por ejemplo:
const array = [ { nombre:"Carlos", edad:29 }, { nombre:"Vanessa", edad:30 } ]; const nombres = array.map(persona => persona.nombre); alert(nombres);
Y no solo eso, tenemos también utilidades como filter, some o every....
Recibe notificaciones por correo
Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.
Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión