ES6 Aujourdh'hui !
A. DAAIF ==> aziz(at)daaif.net
let pour la portée de niveau bloc
const pour définir une cte
// Constantes
const PI = 3.14;
PI = 3.15 // générera une erreur
// Variables
for(let i=0; i<10; i++) {
var j = 2*i;
}
console.log(j); // 18
console.log(i); // Uncaught ReferenceError: i is not defined
// Uniquement en affectation
let add = ( a, b ) => a+b;
let doubles = [0,1,2,3,4,5].map( v => 2*v );
// Contexte
// this === windows
document.body.addEventListener( 'click', function() {
setTimeout( function(){ console.log( this ) }, 1000)
});
// this === HTMLBodyElement
document.body.addEventListener( 'click', function() {
setTimeout( () => console.log( this ), 1000 )
});
// Paramètres par défaut
let add = ( a=0, b=0 ) => a+b
// Nombre de paramètres inconnu à l'avance
let addAll = ( ...x ) => {let s=0; x.forEach(v => s += v); return s }
// Idéale dans les callback
let doubles = [0, 1, 2, 3, 4, 5].map(v => 2*v)
// function accèpte aussi le même style de paramètres
function double ( a = 0 ) { return 2 * a }
function double2 ( ...x ) { return x.map( v => 2 * v ) }
// Chaine de caractère ordinaires en une ligne ES5 et ES6
let s1 = "bla`bla" // ou s1 = 'bla bla'
// Chaine de caractère multiligne
let s1 = `bla
bla` // le limiteur ` est appelé backtick
// String interpolation
let name = "toto"
let msg = `Hello ${name} ! ` // contiendra 'Hello toto'
// Intuitif ~ à la java
class Person {
// Constructeur
constructor( name ) {
this._name = name // Attribut
}
// Méthode
sayHello () {
return `Hello ${ this.name } !`
}
// Getter
get name() { return this._name }
// Setter
set name( name ) { this._name = name }
}
class Employe extends Person {
// Constructeur
constructor( id, name ) {
super(name)
this._id = id
}
// Redéfinition
sayHello () {
return super.sayHello() + ` ID -> ${ this.id } !`
}
// Getter
get id() { return this._id }
// Redéfinition méthode de l'ancetre Object
toString() { return 'Employé : ' + this.sayHello()}
}
// Attributs
let a = 23, b = true
let state = { a, b }
// Equivaut à let state = { a: a, b: b}
// et produit l'objet { a: 23, b: true}
// Méthodes
let lib = {
pluralize(word) { return word + 's' }
}
// Equivaut à { pluralize : (word) => word + 's' }
// Appel de la méthode lib.pluralize('book')
// Destructuring Assignment
let list = [ 1, 2, 3 ]
let [ a, , b ] = list // a -> 1 et b -> 3
// Permutation
[ b, a ] = [ a, b ] // a -> 3 et b -> 1
let obj = { a: 23, b: 33, c: 44 }
let { a, c } = obj
// Equivaut à let a = obj.a, b = ob.b
// a -> 23, c -> 44
...
// Fichier person.js
export class Person {
constructor(name) {
this._name = name
}
get name() { return this._name }
}
// Fichier main.js
import { Person } from 'person'
let p = new Person('toto')
console.log(p.name)
Mettre en place un environnement de développement.
Pour se concentrer sur l'apprentissage de ES6, télécharger le module es6-sass
// Installation globale
npm install -g es6-sass
// Générer la structure d'un projet
mkdir my-project
cd my-project
es6-sass init
// Utiliser le module
es6-sass build # transpiles and bundles es6 to es5
es6-sass sass # transpile .scss files to css
es6-sass minify # uglify .js file and compress .css file
es6-sass eslint # parse js files and show warnings
es6-sass watch # enables the watch mode