Nouveautés dans JavaScript 1.8
Un article de MDC.
Cet article traite de fonctionnalités introduites dans Firefox 3
JavaScript 1.8 est prévu pour accompagner Gecko 1.9 (qui fera partie de Firefox 3). Il s'agit d'une mise à jour moins importante que JavaScript 1.7, mais elle contient certains adaptations suivant la progression vers ECMAScript 4/JavaScript 2. Cette version comprendra toutes les fonctionnalités spécifiées dans JavaScript 1.6 et JavaScript 1.7.
Consultez le bug 380236 pour suivre les progrès du développement de JavaScript 1.8.
Sommaire |
[modifier] Utilisation de JavaScript 1.8
Afin d'utiliser certaines des nouvelles fonctionnalités de JavaScript 1.8, utilisez :
<script type="application/javascript;version=1.8"> … votre code … </script>
Lorsque vous utilisez le shell JavaScript, des composants XPCOM JavaScript ou des éléments <script> XUL, la dernière version de JavaScript (JavaScript 1.8 dans Mozilla 1.9) est utilisée automatiquement (bug 381031, bug 385159).
Pour utiliser les fonctionnalités nécessitant l'utilisation des nouveaux mots-clés « yield » et « let », la version 1.7 ou supérieure doit être spécifiée, car du code existant peut utiliser ces mots-clés comme noms de variables ou de fonctions. Les fonctionnalités qui n'utilisent pas de nouveaux mots-clés (comme les expressions génératrices) peuvent être utilisés sans préciser la version de JavaScript.
[modifier] Fermetures d'expressions
Cet ajout n'est qu'un raccourci pour écrire des fonctions simples, donnant au langage quelque chose de semblable à une notation de Lambda-calcul typique.
JavaScript 1.7 et plus anciens :
function(x) { return x * x; }
JavaScript 1.8 :
function(x) x * x
Cette syntaxe permet de ne pas utiliser les crochets et l'instruction return en les rendant implicites. Il n'y a aucun bénéfice particulier à tirer de l'écriture de code de cette manière, à part le fait que ce soit plus court syntaxiquement.
Exemples :
Un raccourci pour lier des écouteurs d'évènements :
document.addEventListener("click", function() false, true);
Utilisation de cette notation avec certaines des fonctions pour les tableaux de JavaScript 1.6 :
elems.some(function(elem) elem.type == "text");
[modifier] Expressions génératrices
Cet ajout permet de créer des générateurs simplement (les générateurs ont été introduits dans JavaScript 1.7). Typiquement, on aurait eu besoin de créer une fonction personnalisée contenant un yeld, mais ceci permet d'utiliser une syntaxe semblable à la compréhension de tableaux pour créer une instruction génératrice identique.
Dans JavaScript 1.7, on pourrait écrire quelque chose de semblable à ceci pour créer un générateur personnalisé pour un objet :
function add3(obj) {
for ( let i in obj )
yield i + 3;
}
let it = add3(someObj);
try {
while (true) {
document.write(it.next() + "<br>\n");
}
} catch (err if err instanceof StopIteration) {
document.write("Fin de l'enregistrement.<br>\n");
}
En JavaScript 1.8, on peut éviter la création d'une fonction génératrice personnalisée en créant une expression génératrice à la place :
let it = (i + 3 for (i in someObj));
try {
while (true) {
document.write(it.next() + "<br>\n");
}
} catch (err if err instanceof StopIteration) {
document.write("Fin de l'enregistrement.<br>\n");
}
Des expressions génératrices peuvent également être passées, comme valeurs, à une fonction. C'est particulièrement notable étant donné que les générateurs ne sont pas exécutés tant qu'ils ne sont pas absolument nécessaires (contrairement aux situations typiques de compréhension de tableaux, où ceux-ci sont construits à l'avance). Voici un exemple de cette différence :
En utilisant une définition de tableau par compréhension en JavaScript 1.7
handleResults([ i for ( i in obj ) if ( i > 3 ) ]);
function handleResults( results ) {
for ( let i in results )
// ...
}
En utilisant une expression génératrice de JavaScript 1.8
handleResults( i for ( i in obj ) if ( i > 3 ) );
function handleResults( results ) {
for ( let i in results )
// ...
}
La différence significative entre les deux exemples est qu'en utilisant l'expression génératrice, il ne faut parcourir la structure obj qu'une seule fois au total, contrairement à la définition par compréhension, et de même lors des itérations dans celle-ci.
[modifier] Plus d'extras pour les tableaux
Deux nouvelles méthodes itératives pour Array sont fournies avec JavaScript 1.8, il s'agit de :
-
reduce()— exécute une fonction sur chaque élément du tableau et collecte les résultats des appels précédents. -
reduceRight()— exécute une fonction sur chaque élément du tableau et collecte les résultats des appels précédents, mais dans le sens inverse.
[modifier] Changements dans les for..in déstructurants
À faire : mentionner Nouveautés dans JavaScript 1.7#Parcours d'objets (bug 366941).
[modifier] Changements à venir
Parmi les autres changements prévus dans JavaScript 1.8, citons :
- L'encodage et décodage JSON encoding.
- Une syntaxe de découpage.
- Déstructuration généralisée avec
for...in.