Contrairement à ECMAScript 2015 (ex ECMAScript 6), la nouvelle référence de JavaScript, telle qu’elle a été publiée par le groupe TC-39 d’ECMA International, n’est pas une « release » majeure.
Alors que la version précédente avait totalement révolutionné le langage, on trouve ici quelques nouveautés syntaxiques très limitées, mais pas de changements fonctionnels profonds, comme cela avait été le cas avec ECMAScript 2015.

C’est surtout le nouveau processus de mise à jour tel que l’a voulu le groupe TC-39, qui a retenu l’attention, puisque EC16 est la première « release » issue de ce processus. Qui va donc se renouveler chaque année, comme le font désormais la plupart des grands éditeurs, qu’il s’agisse de langages, d’API ou de systèmes d’exploitation.

Retour de l’opérateur d’exponentiation

Bizarrement, l’opérateur ** d’exponentiation avait disparu de la norme depuis près de 20 ans, sans que l’on en connaisse les raisons et lorsque l’on voulait élever un nombre x à la puissance y, il fallait passer par l’objet Math JavaScript :

Math.pow(3,4) //3*3*3*3 ou 3 puissance 4

Avec le retour de **, on écrira :

3**4 //3*3*3*3

Evidemment il n’y a pas de quoi soulever les foules…

L’autre nouveauté d’ECMAScript 2016 est une nouvelle méthode « includes » de l’objet Array : Array.prototype.includes

sachant qu’en JavaScript, prototype est une propriété des objets créés par les constructeurs (mais aussi des fonctions), une sorte de carte de visite de ses propriétés, que l’on peut modifier de telle manière que toutes les instances du même objet soient « calibrées » de la même manière.

On peut également utiliser la propriété prototype pour ajouter des propriétés et des méthodes aux objets, même à ceux qui ont déjà été créés.

Cette nouvelle méthode permet donc de rechercher une occurrence de valeur dans un objet Array, la méthode s’exposant avec la signature :

Array.prototype.includes (value : any) : boolean

Qui retourne true si « value » est un élément du tableau et « false » autrement.

[‘1’, ‘2’, ‘3’, ‘5’, ‘7’, ‘8’, ‘9’].includes (‘3’) va retourner « true »

[‘1’, ‘2’, ‘3’, ‘5’, ‘7’, ‘8’, ‘9’].includes (‘4’) va retourner « false »

Les programmeurs feront le rapprochement avec la méthode IndexOf, la seule différence étant que « includes » détecte la propriété NaN, une valeur non numérique, ce que ne sait pas faire IndexOf.

Mais c’est évidemment un détail.

A noter encore qu’une évolution très attendue de support des foncions asynchrones a été reportée à la prochaine release de 2017.