Chaînes

Tout ensemble de caractères (lettres, chiffres, symboles, etc.) entre un ensemble de guillemets doubles ("), de guillemets simples (') ou de barres obliques inverses (`) est une primitive de chaîne. Vous avez déjà vu quelques exemples de chaînes dans ce cours: les instances de console.log dans le module précédent contenaient des primitives de chaîne.

console.log( "Hello, World." );
> Hello, World.

"Hello, World." est une primitive de chaîne. Vous obtenez le même résultat avec des guillemets simples ou des crochets arrière:

console.log( 'Hello, World.' );
> Hello, World.

console.log(`Hello, World.`);
> Hello, World.

Une série de caractères entre guillemets est appelée chaîne littérale. Les guillemets doubles et simples se comportent de la même manière, et l'un peut contenir l'autre en tant que caractère dans la chaîne elle-même:

console.log( "I'm a string." );
> I'm a string.

console.log( '"A string," I said.' );
> "A string," I said.

Une instance du même caractère de fermeture dans la chaîne "ferme" la chaîne, ce qui entraîne probablement des erreurs:

console.log( '"I'm a string," I said.' );
> Uncaught SyntaxError: missing ) after argument list

Pour éviter cela, échappez le caractère à l'aide d'une barre oblique inverse (\):

console.log( '"I\'m a string," I said.' );
> "I'm a string," I said.

Objet chaîne

Lorsqu'il est appelé en tant que fonction, l'objet String force une valeur spécifiée à une chaîne littérale.

let myString = String( 10 );

myString
> "10"

typeof myString
> string

Comme indiqué dans la section Héritage par prototypage, vous devrez rarement utiliser l'objet String comme constructeur. Il crée un objet de chaîne contenant la valeur spécifiée, ainsi que les méthodes et les propriétés déjà fournies par l'objet String, au lieu d'une chaîne littérale.

let stringObj = new String( "My new string." );

typeof stringObj
> object

stringObj
> String { "My new string." }

Concaténation

Lorsqu'il est utilisé dans le contexte de chaînes plutôt que de nombres, un seul signe plus (+) agit comme un opérateur de concaténation, combinant plusieurs valeurs de chaîne en une seule chaîne:

console.log( "My" + " string." );
> My string.

Littéraux de chaîne et littéraux de modèle

Les guillemets simples, les guillemets doubles et les guillemets obliques peuvent être utilisés de manière interchangeable pour créer des primitives de chaîne. Toutefois, vous pouvez également utiliser des guillemets inversés pour spécifier des chaînes littérales de modèle (parfois appelées "chaînes de modèle"). Contrairement aux chaînes littérales créées par des guillemets simples ou doubles, les chaînes littérales de modèle permettent d'utiliser des chaînes multilignes et l'interpolation de chaînes.

const myString = "This
is a string.";
> Uncaught SyntaxError: "" string literal contains an unescaped line break

const myString = `This
is a string.`;

console.log( myString );

> This
is a string.

Les littéraux de modèle peuvent contenir des expressions d'espace réservé marquées par un signe dollar et des accolades (${}). Ces espaces réservés sont "interprétés" par défaut, ce qui signifie que le résultat de l'expression remplace l'espace réservé dans la chaîne finale.

console.log( "The result is " + ( 2 + 4 ) + "." );
> The result is 6.
console.log( `The result is ${ 2 + 4 }.` );
> The result is 6.

Vous pouvez transmettre une chaîne littérale de modèle à une fonction personnalisée pour créer un modèle tagué, un appel de fonction qui utilise une seule chaîne littérale de modèle comme ensemble d'arguments et permet à ses espaces réservés d'être renseignés en fonction de la logique définie par l'auteur.

Le premier argument d'une fonction de balise contient un tableau de valeurs de chaîne, et les autres arguments définissent les espaces réservés. Cet ensemble de valeurs de chaîne est créé en "divisant" la valeur littérale du modèle à chaque espace réservé qu'il contient. Le premier élément du tableau contient tous les caractères jusqu'au premier espace réservé, le deuxième élément contient tous les caractères entre le premier et le deuxième espace réservé, et ainsi de suite. Chaque espace réservé est transmis à la fonction de balise en tant que valeur autonome avec un espace réservé associé.

const myNoun = "template literal";

function myTagFunction( myStrings, myPlaceholder ) {
    const myInitialString = myStrings[ 0 ];
    console.log( `${ myInitialString }modified ${ myPlaceholder }.` );
}

myTagFunction`I'm a ${ myNoun }.`;
> "I'm a modified template literal."

Vérifier vos connaissances

Quel caractère permet d'échapper des caractères ?

Une barre oblique inverse ()
Un guillemet double (")
Une barre oblique (/)

Quel caractère est utilisé pour la concaténation ?

+
&
.