ECMASCRIPT, ECMA

Standardized by a standards body called ECMA. Similar to  W3C.

Covers

  • Language Syntax - parsing, keywords, operators
  • Types - undefined, null, boolean, number, string, and object, symbol
  • Prototypes and inheritance
  • Built-in object and functions ( Math, Array etc )

Does not Cover

  • HTML and CSS
  • Dom
  • NodeJS stdlib

Arrow

I make anonymous functions shorter.

ES5

ES6

const numbers = [1, 2, 3]
const squares = numbers.map(x => x * x)
const numbers = [1, 2, 3]
const squares = numbers.map(function (x) { 
    return x * x 
})

Arrow

More intuitive handling of current object context.

PROMISES

Now a standard feature.

Events vs Promises

Events are best used for actions that can happen multiple times on the same element.

EG click

Where promises help

ASYNCHRONOUS REQUESTS.
Where Tracking all successes and failures is CUMBERSOME 

EXAMPLE

The pyramid of doom

 step1(function (value1) {
     step2(value1, function(value2) {
         step3(value2, function(value3) {
             step4(value3, function(value4) {
                // yay
             });
         });
     });
 });
         

EXAMPLE

A more MANAGEABLE TOWER 

var step1 = new Promise(...);

step1.then(step2)
    .then(step3)
    .then(step4)
    .then((value4) => {
        // Do something with value4
    })
    .catch(function (error) {
        // Woot
        throw new Error('fatal error in promises:' + error.message)
});
        

ANALOGY NO. 1

eventually having a value at some indeterminable point in the future.

OBJECT.assign()

Extending things with other things into potentially new things

ES6

 var o1 = { a: 1 }
 var o2 = { b: 2 }

 // clone
 var copy = Object.assign({}, o1)

 // merge
 var obj = Object.assign(o1, o2)

ES5

ES6

const numbers = [1, 2, 3]
const squares = numbers.map(x => x * x)
const numbers = [1, 2, 3]
const squares = numbers.map(function (x) { 
    return x * x 
})

Template Strings

IN*TER*pol*AT*ion

let total = 30;
let name = 'Laurent';
let msg = `${name} your total is: ${total} (${total*1.05} + tax)`;

console.log(msg);  // "Laurent your total is: 30 (31.5 + tax)"
                

CLASSES

Example

 class Person {

    constructor(name) {
        this.name = name;
    }

    description() {
        return `My name is ${this.name}`
    }
}

Inheritance

Oh GOD WHY
( cue Hierarchical hell )

Title text
sample text

class Jerk extends Person {
    constructor(name) {
        super(name);
        this.jerk = true;
    }

    isJerk() {
        return this.jerk;
    }
}

DEFAULT PARAMETERS

Kinda neat

es5

es6

function f(x, y = 7, z = 42) {
    return x + y + z
}
function f (x, y, z) {
    if (y === undefined)
        y = 7;
    if (z === undefined)
        z = 42;
    return x + y + z;
}

DESTRUCTURING Assignment

Also kinda neat

es5

es6

var list = [ 1, 2, 3 ]

var [ a, , b ] = list

[ b, a ] = [ a, b ]



var list = [ 7 ]
var [ a = 1, b = 3, c = 5] = list
/*
a === 7
b === 3
c === undefined
*/
                
var list = [ 1, 2, 3 ]
var a = list[0], b = list[2]
var tmp = a
a = b
b = tmp

deck

By ..

deck

  • 1,648