Introduction
ECMAScript 6, également connu sous le nom D’ECMAScript 2015, est la dernière version du standard ECMAScript. ES6 est une mise à jour importante de la langue, et la première mise à jour de la langue depuis ES5 a été normalisé en 2009. La mise en œuvre de ces fonctionnalités dans les principaux moteurs JavaScript est en cours.
Voir la norme ES6 pour la spécification complète du langage ECMAScript 6.,
ES6 inclut les nouvelles fonctionnalités suivantes:
- flèches
- classes
- une amélioration de la littéraux d’objet
- modèle de chaînes de caractères
- déstructuration
- par défaut + repos + spread
- laissez – + const
- les itérateurs + pour..,de
- générateurs
- unicode
- modules
- Chargeurs de modules
- carte + set + weakmap + weakset
- proxies
- symboles
- éléments intégrés sous-classables
- promesses
- mathématiques + nombre + chaîne + tableau + objet API
- littéraux binaires et octaux
- reflect API
- tail calls
ECMAScript 6 features
arrows
les flèches sont un raccourci de fonction utilisant la syntaxe =>
. Ils sont syntaxiquement similaires à la fonctionnalité associée en C#, Java 8 et CoffeeScript., Ils prennent en charge les corps de bloc d’instructions ainsi que les corps d’expression qui renvoient la valeur de l’expression. Contrairement aux fonctions, les flèches partagent le même this
lexical que leur code environnant.
Plus d’informations: MDN Arrow Functions
Classes
Les classes ES6 sont un simple sucre sur le modèle oo basé sur un prototype. Avoir un seul formulaire déclaratif pratique rend les modèles de classe plus faciles à utiliser et encourage l’interopérabilité. Les Classes prennent en charge l’héritage basé sur des prototypes, les super appels, les méthodes et constructeurs d’instance et statiques.,
Plus d’informations: classes MDN
littéraux D’objet améliorés
Les littéraux D’objet sont étendus pour prendre en charge la définition du prototype lors de la construction, la sténographie pour les affectationsfoo: foo
, la définition de méthodes, l’exécution de super appels et le calcul Ensemble, ceux-ci rapprochent également les littéraux d’objets et les déclarations de classes, et permettent à la conception basée sur des objets de bénéficier de certaines des mêmes commodités.,
Plus d’infos: Mdn Grammar and types: Object literals
Template Strings
Les Template strings fournissent du sucre syntaxique pour la construction de chaînes. Ceci est similaire aux fonctionnalités d’interpolation de chaîne dans Perl, Python et plus encore. En option, une balise peut être ajoutée pour permettre de personnaliser la construction de la chaîne, en évitant les attaques par injection ou en construisant des structures de données de niveau supérieur à partir du contenu de la chaîne.
Plus d’informations: MDN Template Strings
déstructuration
la déstructuration permet la liaison en utilisant la correspondance de motifs, avec la prise en charge de la correspondance des tableaux et des objets., La déstructuration est souple, similaire à la recherche d’objet standard foo
, produisant des valeurs undefined
lorsqu’elle n’est pas trouvée.
Plus d’informations: affectation de déstructuration MDN
Default + Rest + Spread
appelé-valeurs de paramètre par défaut évaluées. Transformez un tableau en arguments consécutifs dans un appel de fonction. Lier les paramètres de fin à un tableau. Rest remplace le besoin de arguments
et adresse les cas courants plus directement.,
function f(x, y=12) { // y is 12 if not passed (or passed as undefined) return x + y;}f(3) == 15
function f(x, ...y) { // y is an Array return x * y.length;}f(3, "hello", true) == 6
function f(x, y, z) { return x + y + z;}// Pass each elem of array as argumentf(...) == 6
More MDN info: Default parameters, Rest parameters, Spread Operator
Let + Const
Block-scoped binding constructs. let
is the new var
. const
is single-assignment. Static restrictions prevent use before assignment.
function f() { { let x; { // okay, block scoped name const x = "sneaky"; // error, const x = "foo"; } // error, already declared in block let x = "inner"; }}
More MDN info: let statement, const statement
Iterators + For..,Des objets itérateurs
permettent une itération personnalisée comme CLR IEnumerable ou Java Iterable. Généralisez for..in
à une itération personnalisée basée sur un itérateur avec for..of
. Ne nécessite pas de réaliser un tableau, permettant des modèles de conception paresseux comme LINQ.
L’itération est basée sur ces interfaces typées canard (en utilisant la syntaxe de type TypeScript pour l’exposition uniquement):
Plus d’informations: MDN pour…des générateurs
simplifient la création d’itérateurs en utilisantfunction*
Etyield
., Une fonction déclarée comme function * renvoie une instance de générateur. Les générateurs sont des sous-types d’itérateurs qui comprennent supplémentaires next
et throw
. Ceux-ci permettent aux valeurs de revenir dans le générateur, donc yield
est une forme d’expression qui renvoie une valeur (ou jette).
Remarque: Peut également être utilisé pour activer la programmation asynchrone de type ‘await’, voir aussi la proposition ES7 await
.,
l’interface du générateur est (en utilisant la syntaxe de type TypeScript pour l’exposition uniquement):
interface Generator extends Iterator { next(value?: any): IteratorResult; throw(exception: any);}
Plus d’informations: protocoles D’itération MDN
Unicode
ajouts Non cassants pour prendre en charge Unicode complet, y compris la nouvelle forme littérale Unicode dans les chaînes et>mode pour gérer les points de code, ainsi que de nouvelles API pour traiter les chaînes au niveau des points de code 21 bits. Ces ajouts prennent en charge la création d’applications globales en JavaScript.
Plus d’informations: MDN RegExp.prototype.,unicode
Modules
prise en charge au niveau de la langue des modules pour la définition des composants. Codifie les modèles à partir de chargeurs de modules JavaScript populaires (AMD, CommonJS). Comportement d’exécution défini par un chargeur par défaut défini par l’hôte. Modèle implicitement asynchrone-aucun code ne s’exécute tant que les modules demandés ne sont pas disponibles et traités.,v>
certaines fonctionnalités supplémentaires incluent export default
Et export *
:
// lib/mathplusplus.jsexport * from "lib/math";export var e = 2.71828182846;export default function(x) { return Math.log(x);}
// app.jsimport ln, {pi, e} from "lib/mathplusplus";alert("2π = " + ln(e)*pi*2);
plus d’informations MDN: déclaration d’importation, déclaration d’exportation
Chargeurs de modules
support des chargeurs de modules:
- chargement dynamique
- isolation d’état
- isolation globale de l’espace de noms
- crochets de compilation
- virtualisation imbriquée
le chargeur de modules par défaut peut être configuré, et de contextes contraints.,
Map + Set + WeakMap + WeakSet
structures de données efficaces pour les algorithmes courants. WeakMaps fournit des tables secondaires sans fuite.
Plus D’informations MDN: Map, Set, WeakMap, WeakSet
Proxies
Les Proxies permettent de créer des objets avec toute la gamme de comportements disponibles pour les objets hôtes. Peut être utilisé pour l’interception, la virtualisation d’objets, la journalisation/profilage, etc.
Il existe des pièges disponibles pour toutes les méta-opérations au niveau de l’exécution:
Plus d’informations: proxy MDN
symboles
Les symboles permettent le contrôle d’accès pour l’état de l’objet., Les symboles permettent de saisir les propriétés par string
(comme dans ES5) ou symbol
. Les symboles sont un nouveau type primitif. Optionneldescription
paramètre utilisé dans le débogage – mais ne fait pas partie de l’identité. Les symboles sont uniques (comme gensym), mais pas privés car ils sont exposés via des fonctionnalités de réflexion comme Object.getOwnPropertySymbols
.
Plus d’informations: symbole MDN
éléments intégrés sous-classables
dans ES6, les éléments intégrés commeArray
,Date
et DOMElement
s peuvent être sous-Classés.,
la construction D’objet pour une fonction nomméeCtor
utilise maintenant deux phases (toutes deux virtuellement distribuées):
- Call
Ctor
pour allouer l’objet, en installant tout comportement spécial - Invoke constructeur sur une nouvelle instance pour initialiser
9dee5c7533″> symbole est disponible via Symbol.create
. Les éléments intégrés exposent maintenant explicitement leur @@create
.,
API Math + Number + String + Array + Object
de nombreux nouveaux ajouts à la bibliothèque, y compris les bibliothèques mathématiques de base, les aides à la conversion de tableaux, les aides à la chaîne et les objets.assigner pour la copie.
plus D’informations MDN: nombre, mathématiques, tableau.depuis, Tableau.de Tableau.prototype.copyWithin, l’Objet.attribuer
Binaires, Octales et Littéraux
Deux nouveaux littéral numérique formes sont ajoutés pour les binaires (b
) et octal (o
).
0b111110111 === 503 // true0o767 === 503 // true
les Promesses
les Promesses sont une bibliothèque pour la programmation asynchrone., Les promesses sont une représentation de première classe d’une valeur qui peut être rendue disponible à l’avenir. Les promesses sont utilisées dans de nombreuses bibliothèques JavaScript existantes.
Plus d’informations: MDN Promise
Reflect API
Full reflection API exposant les méta-opérations au niveau de l’exécution sur les objets. C’est effectivement l’inverse de L’API Proxy, et permet de faire des appels correspondant aux mêmes méta-opérations que les traps proxy. Particulièrement utile pour implémenter des proxys.,
// No sample yet
Plus d’informations: MDN Reflect
appels de queue
Les appels en position de queue sont garantis pour ne pas développer la pile sans limite. Rend les algorithmes récursifs sûrs face aux entrées illimitées.