ES6 esce con un nuovo tipo di stringa letterale, utilizzando il back-tick come delimitatore. Questi valori letterali consentono l'incorporamento di espressioni di interpolazione di stringa di base, che vengono quindi analizzate e valutate automaticamente.
let person = {name: 'RajiniKanth', age: 68, greeting: 'Thalaivaaaa!' };
let usualHtmlStr = "<p>My name is " + person.name + ",</p>\n" +
"<p>I am " + person.age + " old</p>\n" +
"<strong>\"" + person.greeting +"\" is what I usually say</strong>";
let newHtmlStr =
`<p>My name is ${person.name},</p>
<p>I am ${person.age} old</p>
<p>"${person.greeting}" is what I usually say</strong>`;
console.log(usualHtmlStr);
console.log(newHtmlStr);
Come potete vedere, abbiamo usato il `
intorno ad una serie di personaggi, che vengono interpretati come una stringa letterale, ma eventuali espressioni della forma ${..}
vengono analizzati e valutati in linea immediatamente.
Uno veramente bello beneficio di stringhe interpolati è loro consentito di dividere su più linee:
var Actor = {"name" : "RajiniKanth"};
var text =
`Now is the time for all good men like ${Actor.name}
to come to the aid of their
country!`;
console.log(text);
// Now is the time for all good men
// to come to the aid of their
// country!
interpolata Espressioni
Qualsiasi espressione valida è permesso di apparire all'interno ${..}
in una stringa di interpolato letterale, comprese le chiamate di funzione, le chiamate di espressioni di funzioni inline e persino altri valori letterali stringa interpolati!
function upper(s) {
return s.toUpperCase();
}
var who = "reader"
var text =
`A very ${upper("warm")} welcome
to all of you ${upper(`${who}s`)}!`;
console.log(text);
// A very WARM welcome
// to all of you READERS!
Qui, la stringa interna `${who}s`
interpolato letterale era convenienza un po 'meglio per noi quando si associa la variabile che con la stringa "s"
, al contrario di who + "s"
. Anche per mantenere una nota è una stringa interpolato letterale è solo con scope lessicale in cui appare, non è ambito in modo dinamico in alcun modo
function foo(str) {
var name = "foo";
console.log(str);
}
function bar() {
var name = "bar";
foo(`Hello from ${name}!`);
}
var name = "global";
bar(); // "Hello from bar!"
Utilizzando il modello letterale per il codice HTML è sicuramente più leggibile, riducendo il fastidio.
Il modo più semplice antiche:
'<div class="' + className + '">' +
'<p>' + content + '</p>' +
'<a href="' + link + '">Let\'s go</a>'
'</div>';
Con ES6:
`<div class="${className}">
<p>${content}</p>
<a href="${link}">Let's go</a>
</div>`
- La stringa può estendersi su più righe.
- Non è necessario ignorare i caratteri di citazione.
- È possibile evitare i raggruppamenti come: '">'
- Non è necessario utilizzare l'operatore più
targhetta del modello letterali
Possiamo anche contrassegnare una stringa di modello,. quando una stringa di modello viene etichettato, i letterali e le sostituzioni vengono passati alla funzione che restituisce il valore risultante.
function myTaggedLiteral(strings) {
console.log(strings);
}
myTaggedLiteral`test`; //["test"]
function myTaggedLiteral(strings,value,value2) {
console.log(strings,value, value2);
}
let someText = 'Neat';
myTaggedLiteral`test ${someText} ${2 + 3}`;
//["test", ""]
// "Neat"
// 5
Possiamo usare l'operatore di spread qui per passare più valori. Il primo argomento, lo abbiamo chiamato stringhe, è una matrice di tutte le stringhe semplici (il materiale tra qualsiasi espressione interpolata).
quindi raccogliamo tutti gli argomenti successivi in una matrice denominata valori utilizzando lo ... gather/rest operator
, sebbene potreste ovviamente averli lasciati come singoli parametri denominati seguendo il parametro stringhe come abbiamo fatto sopra (value1, value2 etc)
.
function myTaggedLiteral(strings,...values) {
console.log(strings);
console.log(values);
}
let someText = 'Neat';
myTaggedLiteral`test ${someText} ${2 + 3}`;
//["test", ""]
// "Neat"
// 5
L'argomento (s) raccolti nella nostra matrice valori sono i risultati delle espressioni interpolazione già valutate trovati nella stringa di testo. Una stringa letterale con tag è come una fase di elaborazione dopo che le interpolazioni sono state valutate, ma prima che il valore della stringa finale sia compilato, consentendo un maggiore controllo sulla generazione della stringa dal letterale. Diamo un'occhiata a un esempio di creazione di modelli riutilizzabili.
const Actor = {
name: "RajiniKanth",
store: "Landmark"
}
const ActorTemplate = templater`<article>
<h3>${'name'} is a Actor</h3>
<p>You can find his movies at ${'store'}.</p>
</article>`;
function templater(strings, ...keys) {
return function(data) {
let temp = strings.slice();
keys.forEach((key, i) => {
temp[i] = temp[i] + data[key];
});
return temp.join('');
}
};
const myTemplate = ActorTemplate(Actor);
console.log(myTemplate);
prime stringhe
nostre funzioni tag ricevono un primo argomento abbiamo chiamato stringhe, che è un array. Ma c'è un ulteriore bit di dati incluso: le prime versioni non elaborate di tutte le stringhe. È possibile accedere a quei valori di stringa prime utilizzando la proprietà .raw
, in questo modo:
function showraw(strings, ...values) {
console.log(strings);
console.log(strings.raw);
}
showraw`Hello\nWorld`;
Come si può vedere, la versione grezza della stringa conserva la \n
sequenza di sfuggita, mentre la versione elaborata della stringa lo tratta come un nuova riga reale senza escape. ES6 è dotato di una funzione incorporata che può essere utilizzata come tag letterale stringa: String.raw(..)
. Si passa semplicemente attraverso le versioni prime delle stringhe:
console.log(`Hello\nWorld`);
/* "Hello
World" */
console.log(String.raw`Hello\nWorld`);
// "Hello\nWorld"
Non dimenticate di [accettare] (/ help/qualcuno -answer) una risposta. –