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?
∖
)"
)/
)Quale carattere viene utilizzato per la concatenazione?
+
&
.