Gabarit de chaînes de caractères

par 1 contributeur :

Cette fonction fait partie du standard ECMAScript 2015 (ES6)
Cette technologie a été finalisée mais il est préférable de consulter le tableau de compatibilité pour connaître l'état de l'implémentation dans les différents navigateurs.

Les gabarits de chaînes de caractères (template strings) sont des littéraux de chaînes de caractères qui intègrent des expressions. Il est possible d'utiliser des chaînes de caractères sur plusieurs lignes ainsi que les fonctionnalités d'interpolation de chaînes.

Syntaxe

`chaîne de texte`

`chaîne ligne 1
 chaîne ligne 2`

`texte ${expression} texte chaîne`

tag `texte ${expression} texte chaîne`

Description

Les gabarits de chaînes de caractères sont délimités par des accents graves seuls (backticks) (` `)  et non avec des doubles ou simples quotes. Les gabarits de chaînes peuvent contenir des éléments de substitution (placeholders). Ceux-ci sont indiqués par le signe dollar ($) et des accolades : ${expression}. Les expressions contenues dans les éléments de substitution et le texte sont ensuite passés à une fonction. La fonction par défaut permet de concaténer les différentes parties en une seule chaîne de caractères. Si une expression précède le gabarit (par exemple : tag ci-avant), le gabarit de chaîne est appelé un gabarit étiquetté. Dans ce cas, l'expression qui étiquette (généralement, ce sera un fonction) le gabarit est appelée pour traiter le gabarit de chaîne. which you can then manipulate before outputting.

Les chaînes de caractères sur plusieurs lignes

Tout caractère de saut de ligne peut être inséré dans le gabarit. Avec des chaînes de caractères classiques, il aurait fallu utilise la syntaxe suivante :

console.log("ligne de texte 1\n\"+
"ligne de texte 2");
// "ligne de texte 1
// ligne de texte 2"

Désormais, avec les gabarits de chaînes, il est possible d'écrire :

console.log(`ligne de texte 1
ligne de texte 2`);
// "ligne de texte 1
//  ligne de texte 2"

Interpolation d'expression

Pour intégrer des expressions dans des chaînes de caractères « normales », il fallait utiliser la syntaxe suivante :

var a = 5;
var b = 10;
console.log("Quinze est " + (a + b) + " et n'est pas " + (2 * a + b) + ".");
// "Quinze est 15 et n'est pas 20."

Désormais, avec les gabarits, on peut utiliser le sucre syntaxique pour rendre la chaîne plus lisible :

var a = 5;
var b = 10;
console.log(`Quinze est ${a + b} et n'est pas ${2 * a + b}.`);
// "Quinze est 15 et n'est pas 20."

Les gabarits de chaînes étiquetés

Il est possible d'utiliser les gabarits de manière plus avancée grâce à l'étiquetage de gabarits. Cette fonction d'étiquette (tag) permettra de modifier la chaîne résultante d'un gabarit. Le premier argument de la fonction est un tableau de littéraux de chaînes de caractères ("Coucou " et " monde" dans l'exemple). Les arguments suivants représentent les valeurs qui sont à traiter (on parle parfois de valeurs cuisinées ou cooked en anglais) dans les expressions de substitutions ("15" et "50" dans l'exemple). Finalement, la fonction renvoie la chaîne résultante du gabarit. Le nom pris pour l'étiquette ci-après n'est qu'un exemple, le nom utilisé pour la fonction peut être n'importe quel nom valide.

var a = 5;
var b = 10;

function tag(strings, ...values) {
  console.log(strings[0]); // "Coucou "
  console.log(strings[1]); // " monde "
  console.log(values[0]);  // 15
  console.log(values[1]);  // 50

  return "Bazinga !";
}

tag`Coucou ${ a + b } monde ${ a * b}`;
// "Bazinga !"

Les chaînes brutes

La propriété spéciale raw, est une propriété du premier argument de la fonction d'étiquette vue ci-avant. Elle permet d'accéder aux chaînes brutes, telles qu'elles ont été entrées.

function tag(strings, ...values) {
  console.log(strings.raw[0]);
}

tag`chaîne ligne 1 \n chaîne ligne 2`;
// affichera dans la console : 
// "chaîne ligne 1 \\n chaîne ligne 2"

De plus, la méthode String.raw() permet de créer des chaînes de caractères brutes, de la même façon qu'avec la concaténation par défaut des gabarits :

String.raw`Salut\n${2+3}!`; // "Salut\\n5!"

Securité

Les gabarits de chaînes de caractères ne doivent pas être manipulés par les utilisateurs finaux car il permettent d'accéder aux variables et fonctions.

`${console.warn("this is",this)}`; // "this is" Window

let a = 10;
console.warn(`${a+=20}`); // "30"
console.warn(a); // 30

Spécifications

Spécification Statut Commentaires
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'Template Literals' dans cette spécification.
Standard Définition initiale. Défini dans plusieurs sections de la spécification : les littéraux de gabarits, les gabarits étiquetés

Compatibilité des navigateurs

Fonctionnalité Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Support simple 41 (Oui) 34 (34) Pas de support 28.0 Pas de support
Fonctionnalité Android Chrome pour Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Support simple Pas de support 41.0 34.0 (34) Pas de support 28.0 Pas de support

Voir aussi

Étiquettes et contributeurs liés au document

Contributeurs à cette page : SphinxKnight
Dernière mise à jour par : SphinxKnight,
Masquer la barre latérale