Default Params

function newFunction(name, age, country){
    var name = name || 'Pablo';
    var age = age || 27;
    var country = country || 'Ecuador';
    console.log(name, age, country);
}
//es6 Ahora se pueden establecer valores por defecto desde la declaración 
//    de los parametros.
function newFunction2(name = 'pablo', age = 27, country = 'ecuador'){
    console.log(name, age, country);
}

newFunction2();      //Salida> pablo 27 ecuador 
newFunction2('Dayana','26','EC'); //Salida> Dayana 26 EC

Concatenación (Template Literals)

let hello = 'hello';
let world = 'world';
let phrase = hello + ' ' + world;
console.log(phrase);

//es6 Se usan template Literals para concatenar strings
let phrase2 = `${hello} ${world}`;
console.log(phrase2);
// La salida es la misma en los dos casos

Multilinea

let lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam eget ornare risus, a gravida erat. \\n"
+ "a consectetur sem metus sit amet nulla."

//es6 Se usan template literals para tener multilinea sin la necesidad de cerrarlos
let lorem2 = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam eget ornare risus, a gravida erat.
a consectetur sem metus sit amet nulla. `;

console.log(lorem);
console.log(lorem2);
// La salida es la misma en los dos casos

Destructuración de elementos

let person = {
    'name': 'Pablo',
    'age': 27,
    'country': 'EC'
}

console.log(person.name, person.age, person.country);

//es6 Se usa esta estructura para poder acceder a los datos de forma mas directa.
let {name, age, country} = person;
console.log(name, age,country);

// La salida de los dos es la misma

Operador de Propagación

let team1 =['Oscar','Julian','Ricardo'];
let team2 = ['Dayana','Viviana','Jenifer'];

//es6 El operador de propagación ... nos permite detro de education traer los elementos
//    de team1 y team2, y unirlos
let education = ['David', ...team1, ...team2];
console.log(education);
//salida> [ 'David', 'Oscar', 'Julian', 'Ricardo', 'Dayana', 'Viviana', 'Jenifer' ]

Propiedad de objetos mejorada

let name = 'Pablo';
let age = 27;
obj = {name: name, age: age}

//es6 Ahora en la asignacion toma directamente la llave y el valor de las variables.
obj2 = {name, age}
console.log(obj);
console.log(obj2);
// La salida es la misma en los dos casos

Arrow function

Estas funciones vienen a trabajar con dos elementos , una sintaxis mas reducida y un this no vinculable. Las arrow function son funciones anónimas

const names = [
    {name: 'Pablo', age: 27},
    {name : 'David', age: 28}
]

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

//es6 Las arrow function permiten un código mas flexible y estético
let listOfNames2 = names.maps(item => console.log(item.name))

const listOfNames3 = (name, age, country) => {
    ...
}

const listOfNames4 = name => {
    ...
}

const square = num => num * num;

Promesas

Las promesas son con las que se trabaja el asincronismo, vienen a solucionar el callback hail, la promesa es que en cierto tiempo es que algo va a pasar en cierto tiempo.

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

helloPromise()
    .then(response => console.log(response))
    .then(() => console.log('hola'))
    .catch(error => console.log(error));
// salida>
// Hey!
// hola

Clases