Novedades acerca de ECMAScript6 2019/06/05
'var' puede convertir las variables en datos nuevos ❗
var nombre = 'Erick';
var nombre = 'Osorio';
console.log(nombre); //Osorio
'let' y 'const' no puede convertir las variables en datos nuevos ❗
let nombre = 'Erick';
let nombre = 'Osorio';
const nombre = 'Erick';
const nombre = 'Osorio';
console.log(nombre); //Error (al menos compilando con babel)
//Duplicate declaration "nombre"
La burbuja 1 abarca el scope global y tiene solo un identificador en foo.
La burbuja 2 abarca el scope de foo, que incluye los tres identificadores: a, bar, y b.
La burbuja 3 abarca el scope de bar, e incluye solo un identificador: c.
(Kyle, 2014.)
Puede tomar datos fuera del bloque ❗
var edad = 18
function saludo(){
var esAdulto = true;
}
console.log(esAdulto); //true
No puede tomar datos fuera del bloque ❗
let edad = 18
function saludo(){
let esAdulto = true;
}
console.log(esAdulto); //Error de referencia "esAdulto" no definido
Ahora puede tomar los datos dentro del bloque ✅
let edad = 18
function saludo(){
let esAdulto = true;
console.log(esAdulto); //true
}
const nombre = 'Erick';
nombre = 'Osorio';
//Error "nombre" es sólo lectura ❌
const colores = ['Rojo', 'Verde'];
colores = 'Texto plano'
//Error "colores" es sólo lectura ❌
const colores = ['Rojo', 'Verde'];
colores.push('Azul')
console.log(colores) //['Rojo', 'Verde', 'Azul'] ✅
const nombre = 'Erick';
const edad = 23;
const pais = "Mexico";
console.log("La persona es" + nombre + ", tiene " + edad + " y es de " + pais) ❌
console.log(`La persona es ${nombre}, tiene ${edad} y es de ${pais}`) ✅
const nombres = ['Carlos', 'Alejandro', 'Manuel', 'Cesar'];
const numero_caracteres_mal = nombres.map((nombre) => {
return `${nombre} tiene ${nombre.length} letras`
}); ❌
const numero_caracteres = nombres.map(nombre => `${nombre} tiene ${nombre.length} letras`); ✅
//Solo en un parámetro quitar los paréntesis = (nombre) a nombre
console.log(numero_caracteres)
//(4) ["Carlos tiene 6 letras", "Alejandro tiene 9 letras", "Manuel tiene 6 letras", "Cesar tiene 5 letras"]
function registrarUsuario(nombre,
pais = 'No definido',
correo = 'No llega',
telefono = 'Vacío') {
return `Nombre: ${nombre},
País: ${pais},
Correo: ${correo},
Teléfono: ${telefono}`
}
console.log(registrarUsuario('Carlos', undefined, '[email protected]', ''))
//Nombre: Carlos, País: No definido, Correo: [email protected], Teléfono:
const persona = ['Erick', 23, 'México'/*, 'Desarrollador web'*/];
const [nombre, , pais, profesion = 'No especificado'] = persona;
console.log(nombre); //Erick
console.log(profesion); //No especificado
mostrarInfo(persona);
const mostrarInfo = ( [nombre, , pais] ) => {
console.log(nombre,pais); // Erick México
}
const usuario = {
nombre: 'Erick',
correo: '[email protected]',
edad: 22,
pais: 'Mexico',
/*profesion: 'Desarrollador Web'*/
}
const {nombre, pais, profesion = 'No especificado'} = usuario;
const mostrarInfo = ( { nombre, profesion = 'Estudiante', pais} ) => console.log(`${nombre} es ${profesion} de ${pais}` )
mostrarInfo(usuario);//Erick es Estudiante de México
Para poder usar la herencia hay que asignar constructores a las clases, desde ahí se pueden asignar nuevos métodos e información nueva que necesite el constructor
class Usuario {
constructor(nombre, edad){
// Cuando se usan clases, las variables pasan a llamarse "Propiedades"
//Importante usar this para hacer referencia sólo al constructor
this.nombre = nombre, //Propiedades
this.edad = edad //Propiedades
}
//Las funciones dentro de clases se llaman métodos
mostarSaludo(mensaje){
return mensaje + "+" + this.nombre;
}
}
class Estudiante extends Usuario{
constructor(nombre, edad, carrera) {
super(nombre, edad); //Trae los valores heredados
this.carrera = carrera;
}
mostarSaludo(mensaje){
return `${mensaje} ${this.nombre} de la carrera ${this.carrera}`;
}
}
const erick = new Usuario('Erick', 23);
const Otro = new Estudiante('Otro', 30, 'Desarrollador web');
console.log(erick.nombre) //Erick
console.log(Otro.edad) //30
console.log(erick.mostarSaludo(" Estoy saludando a ")) //Estoy saludando a Erick
console.log(Otro.mostarSaludo(" Estoy saludando a")) //Estoy saludando a Otro de la carrera Desarrollador web
const mostrarDatos = (nombre, edad, correo, pais) => {
console.log(nombre, edad, correo, pais); //(4) ["Erick", 23, "[email protected]", "México"]❌
}
mostrarDatos('Erick', 23, '[email protected]', 'México') ❌
const mostrarDatos = (...datos) => { ✅
console.log(datos); //(4) ["Erick", 23, "[email protected]", "México"]
}
mostrarDatos('Erick', 23, '[email protected]', 'México')
const mostrarDatos = (...datos) => {
console.log(datos); //(4) ["Erick", 23, "[email protected]", "México"]
}
mostrarDatos('Erick', 23, '[email protected]', 'México') ❌
const mostrarDatos = (...datos) => {
console.log(datos);
}
const arregloDatos('Erick', 23, '[email protected]', 'México')
mostrarDatos(...arregloDatos);✅
let promesa = new Promise ((resolve, reject) => {
const exito = false; //Desencadenante para las funciones hechas o no
if (exito){
resolve("Bien :y:");
} else{
reject("Mal :(");
}
});
promesa.then(mensaje=>{ console.log(mensaje); }) //resolve
.catch(mensaje=> { console.log(mensaje); }); //reject
-
FalconMasters - Trabajo de youtube - FalconMasters
-
Erick Osorio - Documentación de Github - iWexter
-
Simpson, Kyle. Scope and closures. Sebastopol, CA: O'Reilly Media, 2014.