Stringhe

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

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

"Hello, World." è un tipo di dati primitivi di stringa. Puoi ottenere lo stesso risultato con virgolette singole o barre verticali:

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

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

Una serie di caratteri racchiusi tra virgolette è chiamata stringa letterale. Le virgolette doppie e singole si comportano allo stesso modo e una può contenere l'altra come 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 di chiusura all'interno della stringa "chiude" la stringa, causando probabilmente errori:

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

Per evitare questo problema, 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 in una stringa letterale.

let myString = String( 10 );

myString
> "10"

typeof myString
> string

Come descritto in Eredità 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, anziché una stringa letterale.

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

typeof stringObj
> object

stringObj
> String { "My new string." }

Concatenazione

Se utilizzato nel contesto di stringhe anziché di numeri, un singolo segno più (+) agisce come 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, le virgolette doppie e i backtick possono essere utilizzati in modo intercambiabile per creare primitive di stringa. Tuttavia, puoi anche utilizzare le barre graffe per specificare letterali di modello (a volte chiamate "stringhe di modello"). A differenza dei letterali stringa creati da virgolette singole o doppie, i letterali di modello consentono di utilizzare stringhe di più righe e l'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 literali di template possono contenere espressioni segnaposto contrassegnate da un simbolo del dollaro e da parentesi graffe (${}). Questi segnaposto sono "interpolati" per impostazione predefinita, ovvero 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 literale di modello può essere passato a una funzione personalizzata per creare un modello con tag, una chiamata di funzione che utilizza un singolo literale di modello 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 di stringa e gli argomenti rimanenti definiscono i segnaposto. Questo array di valori di stringa viene creato "separando" il valore letterale del modello in ogni segnaposto che contiene. Il primo elemento dell'array contiene tutti i caratteri fino al primo segnaposto, il secondo elemento contiene tutti i caratteri tra il primo e il secondo segnaposto e così via. Ogni segnaposto viene passato alla funzione del 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."

Verificare di aver compreso

Quale carattere viene utilizzato per i caratteri di escape?

Una barra rovesciata ()
Una virgoletta doppia (")
Una barra (/)

Quale carattere viene utilizzato per la concatenazione?

+
&
.