EcmaS Versions - cejaramillof/javaScript GitHub Wiki

ES6 - ES2015

Default params

function newFunction(name, age, country) {
  var name = name || 'carlos';
  console.log(name);
}

// ES6
function newFunction(name = 'carlos', age = '23', country = 'USA') {
  console.log(name);
}

newFunction();
newFunction('José', '24', 'CO');

Template Literals

let hello = "Hello";
let world = "World";
// past
let epicPhrase = hello + ' ' + world;
// es6
let epicPhrase2 = `${hello} ${world}`

Multi Line

// past
let lorem = "line 1 \n"
+ "line 2";
// es6
let lorem2 = `Line 1
Line 2`

Destructuring

let person = {
    'name': 'Antonio',
    'age': '28',
    'country': 'Ambato'
};
console.log(person.name, person.age, person.country);

// es6
let {name, age, country} = person
console.log(name, age, country);

Spread Operator

let team1 =['Oscar', 'Julian', 'Ricardo'];
let team2 = ['Valeria', 'Yessenia', 'Camila'];

// es6
let education = ['David', ...team1, ...team2];

var vs let vs const

{
    var globalVar = "Globarl var";
}

{
    let globalLet = 'Global let'
    const AA = 'xd'; // cannot be reassigned
    console.log(globalLet);
    console.log(AA);
}
console.log(AA); // not exist
console.log(globalLet); // not exist
console.log(globalVar);

Parameters in Objects

let name = 'Oscar';
let age = 32;

const obj = {
  name: name,
  age: age
};
console.log('Before ES6 -> ', obj);

// es6
const objES6 = { name, age };
console.log(`After ES6 -> `, objES6);

Arrow Functions

const names = [
  { name: 'Carlos, age: 23 },
  { name: 'Yesica', age: 27 } 
];

let listOfNames = names.map(function(item) {
  console.log('Before ES6 -> ', item.name);
});

// es6
let listOfNamesES6 = names.map(item => console.log(`After ES6 -> ${item.name}`));

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

const listOfNamesES6 = name => {
   ...
}

Promises

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

const foo = false;
helloPromise(foo)
  .then(response => console.log('response -> ', response))
  .then(() => console.log('message -> Hello World!'))
  .catch(error => console.log('error -> ', error));

Class

class Calculator {
  constructor() {
    this.valueA = 0;
    this.valueB = 0;
  }
  sum(valueA, valueB) {
    this.valueA = valueA;
    this.valueB = valueB;
    return this.valueA + this.valueB;
  }
}

const calc = new Calculator();
console.log(calc.sum(2, 2));

Modules (import and export)

import { x } from './xd';
export x;

Generators

function* helloWorld() {
if (true) {
  yield 'hello, ';
}
if (true) {
  yield 'world';
}
}

const generatorHello = helloWorld();
console.log(generatorHello.next().value); // hello, 
console.log(generatorHello.next().value); // world
console.log(generatorHello.next().value); // undefined

// like fibonacci

ES7 - 2016

Includes on array

let numbers = [1,2,5,6,7,3];
if(numbers.includes(7)){
    console.log("Si se encuentra el valor 7")
}
else{
    console.log("No se encuentra");
}

Exponential

let base = 4;
let exponente = 3;
let resultado = base ** exponente;

console.log(resultado);

ES8 - 2017

ASYNC and AWAIT

const myPromise = () => {
    return newPromise((resolve, reject) => {
        (true) ? setTimeout(() => resolve('Ok!'), 1000)
        : reject(new Error('Opsss!'))
    })
}
// es6
myPromise()
    .then(res => console.log(res))
    .catch(err => console.error(err))

// es7
const foo = async () => {
    try {
        const res = await myPromise()
        console.log(res)
    } catch (err) {
        console.log(err)
    }
}
foo()

Object .entries and .values

const data = {
    frontend: "Carlos",
    backend: "Daniela",
    design: "Gabriela"
}

const entries = Object.entries(data);
console.log(entries);
console.log(entries.length);

const values = Object.values(data);
console.log(values);
console.log(values.length);

Padding

const hello = 'hello'
console.log(hello.padStart(7,'hi'))
console.log(hello.padEnd(12,'----'))
console.log('food'.padEnd(12, '----'))

Trailing commas

const data = {
    frontend: "Carlos",
    backend: "Daniela", // this is trailing comma
}

ES9 - 2018

Spread Operator - Destructuring

const obj = {
  name: 'Oscar',
  age: 32,
  country: 'MX'
};

let { name, ...extraInfo } = obj;
console.log(`name: ${name}`);
console.log(`additional information: `, extraInfo);

let { country, ...nameAndAge } = obj;
console.log(`name and age: `, nameAndAge);

Propagation Properties

const person = {
  name: 'Oscar',
  age: 32
};

const personInformation = {
  ...person,
  country: 'MX'
};
console.log(`personInformation: `, personInformation);

Promise Finally

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

helloWorld()
  .then(result => console.log('result -> ', result))
  .catch(err => console.log('err -> ', err))
  .finally(() => console.log('finalizó'));

regEx (improve)

// group
const regexData = /([0-9]{4})-([0-9]{2})-([0-9]{2})/;
const match = regexData.exec('2018-04-28');
const year = match[1];
const month = match[2];
const day = match[3];
console.log('Date -> ', year, month, day);

ES10 - 2019


let list = [1, 2, 3, [1, 2, 3, [1, 2, 3,]]]
console.log(list.flat()); // [1, 2, 3, 1, 2, 3, [1, 2, 3]]
console.log(list.flat(2)); // [1, 2, 3, 1, 2, 3, 1, 2, 3]
console.log(list.flat().flat()); // [1, 2, 3, 1, 2, 3, 1, 2, 3]
console.log(list.flat(Infinity)); // [1, 2, 3, 1, 2, 3, 1, 2, 3]

Flat Map

var arr1 = [1, 2, 3, 4];
arr1.map(x => [x, x * 2]); // return array with arrays
arr1.flatMap(x => [x, x * 2]); // Flat array

Trim Start and End

let string = '      HELLO';
console.log(string.trimStart());
// TRIM END
let string2 = 'HELLO      ';
console.log(string2.trimEnd());

Optional catch binding (Catch without error)

// es7
try { }
catch (error) { console.log(error) }
// es10
// no need send error to use in catch
try { }
catch { console.log(error) }

Entries to Objects

let entries = ['nombre', 'jesus'], ['edad', 22](/cejaramillof/javaScript/wiki/'nombre',-'jesus'],-['edad',-22)
obj = Object.fromEntries(entries)
console.log(entries)
console.log(obj)

Description in Symbol

let s = Symbol('Esta es la descripcion del simbolo')
console.log(s.description);

ES NEXT

Writed by TC39

Stages Idea (sage 0) -> Proposal (1) -> Draft (2) -> Candidate (3) -> Ready (4)

Support in each version of node (click here)