Stringa

Qualsiasi insieme di caratteri (lettere, numeri, simboli e così via) tra un insieme di virgolette doppie ("), virgolette singole (') o apici inversi (`) è un insieme di virgolette primitive. Hai già visto alcuni esempi di stringhe in questo corso: le istanze di console.log nel modulo precedente contenevano primitive di stringhe.

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

"Hello, World." è una stringa primitiva. Il risultato è lo stesso con virgolette singole o apici inversi:

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

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

Una serie di caratteri racchiusi tra virgolette si chiama valore letterale stringa. Le virgolette doppie e singole si comportano allo stesso modo e possono contenere l'altra come un carattere nella stringa stessa:

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

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

Un'istanza dello stesso carattere che include la stringa "chiude" la stringa, causando probabilmente errori:

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

Per evitare che ciò accada, esegui l'escape del carattere utilizzando una barra rovesciata ("`):

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

Oggetto stringa

Quando viene chiamato come funzione, l'oggetto String forza un valore specificato a un valore letterale stringa.

let myString = String( 10 );

myString
> "10"

typeof myString
> string

Come descritto in dettaglio nell'ereditarietà prototipale, raramente dovrai utilizzare l'oggetto String come costruttore. Crea un oggetto stringa contenente il valore specificato, insieme ai metodi e alle proprietà già offerti dall'oggetto String, invece di un valore letterale stringa.

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

typeof stringObj
> object

stringObj
> String { "My new string." }

Concatenazione

Quando utilizzato nel contesto di stringhe anziché numeri, un singolo segno più (+) funge da operatore di concatenazione, combinando più valori di stringa in un'unica stringa:

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

Valori letterali stringa e valori letterali modello

Le virgolette singole, doppie e inversi possono essere utilizzate in modo intercambiabile per creare primitive di stringa. Tuttavia, puoi anche utilizzare gli apici inversi per specificare i valori letterali modello (a volte chiamati "stringhe modello"). A differenza dei valori letterali stringa creati da virgolette singole o doppie, i valori letterali del modello consentono stringhe su più righe e interpolazione di stringhe.

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.

I valori letterali modello possono contenere espressioni segnaposto contrassegnate da un simbolo del dollaro e da parentesi graffe (${}). Questi segnaposto sono "interpolati" per impostazione predefinita, il che significa che il risultato dell'espressione sostituisce il segnaposto nella stringa finale.

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

Un valore letterale modello può essere trasmesso a una funzione personalizzata per creare un modello con tag, ovvero una chiamata di funzione che utilizza un singolo modello di letterale come insieme di argomenti e consente di compilare i relativi segnaposto in base alla logica definita dall'autore.

Il primo argomento di una funzione tag contiene un array di valori stringa e gli argomenti rimanenti definiscono i segnaposto. Questo array di valori stringa viene creato "suddividendo" il valore letterale del modello in corrispondenza di ogni segnaposto che contiene. Il primo elemento dell'array contiene qualsiasi carattere fino al primo segnaposto, il secondo contiene tutti i caratteri compresi tra il primo e il secondo segnaposto e così via. Ogni segnaposto viene passato alla funzione tag come valore autonomo con un segnaposto associato.

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."

Verifica le tue conoscenze

Quale carattere viene utilizzato per l'escape dei caratteri?

Una barra rovesciata ()
Virgolette doppie (")
Una barra (/)

Quale carattere viene utilizzato per la concatenazione?

+
&
.