ES6
ou ECMA Script 6
est un ensemble de normes ou standards de programmation. La version 6 de ce standard est sortie en 2015.
Les constantes
Il n’était possible de définir une constante avec ES5, qu’en passant par la création d’objets. Il fallait donc créer une propriété d’un objet et spécifier que cette propriété n’était ni writable
ni configurable
Avec ES6 il suffit d’écrire :
1 | const OMEGA = 0.5671432904 |
Il peut être intéressant d’utiliser les constantes au lieu de var
afin de signaler qu’il n’y aura pas de réassignement.
Les variables block-scoped
La notion de scope
est très importante en JS.
Une variable peut avoir une portée :
- Globale
- Locale
Une variable globale est modifiable dans l’ensemble du programme, elle est définie en dehors de toute fonction. Une variable locale quant à elle n’existe que dans le cadre de l’exécution de la fonction. Elle est créée lors de l’exécution de la fonction. Elle est ensuite détruite à la fin de l’exécution.
ES6 apporte une nouveauté intéressante en créant des variables dont la portée est limitée à un bloc :
1 | var i |
Ici :
i
est une variable ayant un scope globalegamma
est une variable ayant un scope de bloc
Le Hoisting
Je fais un micro-passage ici par la notion de Hoisting
en Javascript. Car cette notion est intéressante.
La règle est qu’on peut se servir d’une variable et la déclarer a posteriori dans le code..
1 | b= 32; |
Ce code est fonctionnel. Car le moteur va passer en revue le code une première fois pour procéder aux déclarations. En revanche si on utilise le mode strict
on ne peut utiliser ce genre de chose !
Les Arrow Functions
ou fonctions fléchées
On connait trop bien la manière de déclarer des fonctions anonymes. Cette méthode de déclaration est assez longue :
Voici l’ancienne méthode :
1 | odds = evens.map(function (v) { return v + 1; }); |
La nouvelle version ES6
1
2
3
4
5
6
7
8
9
10odds = evens.map(v => v + 1);
// OU encore
(a,b) => a+b
// équivalent à
(a,b) => {
return a+b;
}
// on peut aussi des fonctions sans paramètres de cette manière
() => { instructions }
_ => { instructions }
Les templates et les chaînes de caractères
1 | let amount = "150 $" |
Les paramètres par défaut
Alors qu’il fallait utiliser des techniques un peu moches pour déterminer si un paramètre était renseigné :
1 | // Réassignation de x |
On peut maintenant définir les paramètres ainsi :
1 | let addition = function (a=0,b=0){ |
Boucles for of
(foreach)
Houra voilà le foreach en JS :
1 | let students = ["Joe","Donald"]; |
Les strings multi-lignes
On peut maintenant déclarer une chaîne sur plusieurs lignes grâce au symbole backtish :
1 | var vh = `Mon père, ce héros au sourire si doux, |
Les assignements déstructurés
Avec ES5 on doit faire :
1 | var body = req.body, |
Avec ES6 on fera :
1 | var {username, password} = req.body |
Les promesses
L’utilisation est désormais native.
Les classes
Le grand changement est l’introduction des classes :
Déclaration
1 | class Human { |
Héritage
On peut faire hériter une classe d’une autre classe via le mot clé extends
.
1 | class Teacher extends Human { |
Accès aux méthodes de la classe de base
Pour accéder aux méthodes et propriétés définies dans la classe de base on utilise super
.
1 | class Rectangle extends Shape { |
super.toString()
appelle la méthode toString()
définie dans la classe Shape.
Getters et Setters
1 | class Student extends Human { |
Modularisation: la syntaxe export et import
Dans un module on peut utiliser la syntaxe export
:
1 | export var standard_price = 10 |
Puis dans le fichier principal on peut importer variables et méthodes :
1 | import {standard_price,get_other_prices} from 'module' |
On peut aussi tout importer :1
2import * as my_module from 'module'
console.log(my_module.standard_price);
Comment utiliser ES6.
- N’étant pas supporté encore par tous les navigateurs il faudra utiliser un compilateur comme
Babel
qui se chargera de traduire votre code avec une syntaxe supportée. - Avec NodeJS les principales features sont supportées par les nouvelles versions.