MDN wants to talk to developers like you: https://qsurvey.mozilla.com/s3/8d22564490d8

Stringhe template

Le stringhe template sono stringhe letterali che consentono espressioni incorporate. Puoi usare stringhe multi-linea e caratteristiche di interpolazione stringa con esse.

Sintassi

`stringa testo`

`stringa testo linea 1
 stringa testo linea 2`

`stringa testo ${espressione} stringa testo`

tag `stringa testo ${espressione} stringa testo`

Descrizione

Le stringhe template sono racchiuse dal carattere backtick (` `) (accento grave) invece delle singole o doppie virgolette. Le stringhe template possono contenere segnaposti. Questi sono indicati dal segno del Dollaro e parentesi graffe (${espressione}). Le espressioni nei segnaposti e nel testo compreso vengono passati ad una funzione. La funzione predefinita semplicemente concatena le parti in una stringa. Se c'è un'espressione che precede (tag qui), la stringa template è chiamata "stringa template taggata". In questo caso, l'espressione tag (di solito una funzione) viene chiamata con la stringa template processata, con cui puoi in seguito manipolare prima dell'output.

Stringhe multilinea

Ogni carattere di nuova linea inseriti nel sorgente sono parte della stringa template. Usando stringhe normali, potresti usare la seguente sintassi per ottenere stringhe multilinea:

console.log("stringa testo linea 1\n"+
"stringa testo linea 2");
// "stringa testo linea 1
// stringa testo linea 2"

Per avere lo stesso effetto con le stringhe multilinea, puoi adesso scrivere:

console.log(`stringa testo linea 1
stringa testo linea 2`);
// "stringa testo linea 1
// stringa testo linea 2"

Interpolazione di espressioni

Per incorporare espressioni dentro normale stringhe, potresti fare uso della seguente sintassi:

var a = 5;
var b = 10;
console.log("Quindici è " + (a + b) + " e\nnon " + (2 * a + b) + ".");
// "Quindici è 15 e
// non 20."

Adesso, con le stringhe template, puoi fare uso della sintassi ridotta facendo sostituzioni come questa più leggibile:

var a = 5;
var b = 10;
console.log(`Quindici è ${a + b} and\nnon ${2 * a + b}.`);
// "Quindici è 15 e
// non 20."

Stringhe template taggate

Una forma più avanzata di stringhe template sono le stringhe template taggate. Con esse puoi modificare l'output delle stringhe template usando una funzione. Il primo argomento contiene un array di stringhe letterali ("Ciao" e " mondo" in questo esempio). Il secondo, ed ogni argomento dopo il primo, sono i valori delle espressioni di sostituzione ("15" e "50" qui) processate (o a volte detto lavorate). Alla fine, la tua funzione ritorna la stringa manipolata. Non c'è nulla di speciale sul nome tag nel seguente esempio. Il nome della funzione può essere qualsiasi cosa tu voglia.

var a = 5;
var b = 10;

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

  return "Bazinga!";
}

tag`Ciao ${ a + b } mondo ${ a * b }`;
// "Bazinga!"

Le funzioni Tag non devono per forza ritornare una stringa, come mostrato nel seguente esempio.

function template(strings, ...keys) {
  return (function(...values) {
    var dict = values[values.length - 1] || {};
    var result = [strings[0]];
    keys.forEach(function(key, i) {
      var value = Number.isInteger(key) ? values[key] : dict[key];
      result.push(value, strings[i + 1]);
    });
    return result.join('');
  });
}

template`${0}${1}${0}!`('Y', 'A');  // "YAY!" 
template`${0} ${'foo'}!`('Ciao', {foo: 'Mondo'});  // "Ciao Mondo!"

Stringhe grezze

La proprietà speciale raw, disponibile sull'argomento della prima funzione delle stringhe template taggate, ti consente di accedere alle stringhe grezze per come sono state inserite.

function tag(strings, ...values) {
  console.log(strings.raw[0]); 
  // "stringa testo linea 1 \\n stringa testo linea 2"
}

tag`stringa testo linea 1 \n stringa testo linea 2`;

In aggiunta, il String.raw() metodo esiste per creare stringhe grezze proprio come la funzione template predefinita e contatenazione di stringhe potrebbero creare.

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

Sicurezza

Le stringhe template NON DEVONO essere costruite da utenti non fidati, poichè hanno accesso a variabili e funzioni.

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

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

Specifiche

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Template Literals' in that specification.
Standard Definizione iniziale. Definita in molte sezioni della specifica: Template Literals, Tagged Templates
ECMAScript 2016 Draft (7th Edition, ECMA-262)
The definition of 'Template Literals' in that specification.
Draft Definita in molte sezioni della specifica: Template Literals, Tagged Templates

Compatibilità browser

Caratteristica Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Supporto base 41 (Yes) 34 (34) Not supported 28 9
Caratteristica Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Supporto base Not supported 41 34.0 (34) Not supported 28 9

Vedi anche

Tag del documento e collaboratori

 Hanno collaborato alla realizzazione di questa pagina: manuel-di-iorio
 Ultima modifica di: manuel-di-iorio,