Hjemmeside » Coding » Slik bruker du ES6 Template Literals i JavaScript

    Slik bruker du ES6 Template Literals i JavaScript

    I programmeringen er termen “bokstavelig” refererer til notering av verdier i kode. For eksempel merker vi en strengverdi med en streng bokstavelig det er tegn som er omsluttet i doble eller enkle anførselstegn ("Foo", 'Bar', "Dette er en streng!").

    Mal bokstavelig ble introdusert i ECMAScript 6. De jobber ganske likt med strengstavler; de produserer malverdier og rå malverdier, begge er strenger.

    I motsetning til streng-bokstaver kan malte bokstaver imidlertid produsere verdier som er multi-lined strenger, noe du kan oppnå i en streng bokstavelig bare av legger til nye linjetegn (\ n) til den.

    Malte bokstaver kan også lag strenge med andre verdier (avledet av uttrykk) som du må bruke pluss operatør i en streng bokstavelig ("ditt id er:" + idNo; hvor ID NR er et variabelt uttrykk med en numerisk verdi).

    Alle disse funksjonene gjør maleriske bokstaver mer å foretrekke lag strengverdier.

    Syntaks av mal bokstavler

    Avgrensningen av en mal bokstavelig er accent grave ' karakter (også kjent som backquote karakter eller grave aksent symbol). Et uttrykk inne i bokstavelig (verdien av den er evaluert i løpet av kjøretiden og inkludert i den endelige verdien produsert av bokstavelig) er vedlagt i krøllete regulering med en foregående dollar tegn $.

     'streng $ someExpression strengere' 

    Her er det noe eksempler på mall bokstavene produserende uendret, substituerte (uttrykk erstattet med evaluerte verdier), og multi-foret strenger.

     console.log ( 'hei'); // hallo var navnet = "Joan"; console.log ('hei $ name'); // hallo Joan console.log ('Kjære Joan, Welcome.'); // Kjære Joan, // Velkommen. 

    Unnslippe og rå malverdier

    I en mall bokstavelig, den ' (Backtick), \ (tilbakeslag), og $ (dollar tegn) tegn skal bli rømt bruker flykte karakter \ hvis de skal inkluderes i deres malverdi.

    Som standard er alle fluktsekvenser i en mall bokstavelig ignorert. Hvis du vil inkludere den i utgangen, må du bruke den rå mal verdi.

     console.log ('inline-kode i markup: \' kode \ "); // inline kode i markup: 'kode' var navnet =" Joan "; console.log ('hei \ $ name.'); / / hei $ name. console.log (String.raw'hello \ $ name. '); // hei \ $ navn. 

    De String.raw metode utdataer raw template verdier (den råstrengen form av en mall bokstavelig). I ovennevnte kode, funksjonsanrop av Metoden er referert til som “tagget mal”.

    Merkede maler

    En merket mal er en funksjonsanrop hvor, i stedet for de vanlige parentesene (med valgfrie parametere) i tillegg til funksjonsnavnet, det er en mal bokstavelig hvorfra funksjonen får sine argumenter.

    Så, i stedet for å kalle en funksjon som denne:

     foo (ArgumentsForFoo); 

    Det kalles slik:

     foo'ATemplateStringProvidingArgumentsForFoo '; 

    Funksjonen foo kalles a tag-funksjon. Dens første argument mottatt fra malen bokstavelig er en matrise ringte malobjekt.

    Malen objektet (en matrise) holder alle strengverdiene tolket fra malen bokstavelig og har a eiendom (en annen matrise) som holder alle de raske (un-escaped) strengverdiene tolket fra samme bokstavelige.

    Følgende malobjekt inneholder argumenter for tag-funksjonen alle evaluert eksterne verdier presentere i det bokstavelige (de som er omsluttet i de krøllete armbåndene $ ).

    I koden nedenfor er foo funksjonen er opprettet til output sine argumenter. Funksjonen kalles da i den merkede malemoden, med en mal bokstavelig bære to uttrykk (Navn og id).

     var navnet = "john"; var id = 478; foo'hello $ name. ditt id er: $ id. '; funksjon foo () console.log (argumenter [0]); // Array ["hei", ". Ditt id er:", "." ] console.log (argumenter [1]); // John console.log (argumenter [2]); // 478 

    Det første argumentet utgitt er malobjekt bære alle strengene tolket fra malen bokstavelig, den andre og tredje argumenter er evaluerte verdier av uttrykkene, Navn og id.

    De eiendom

    Som nevnt tidligere har malobjektet en eiendom kalt som er en matrise som inneholder alle de raske (un-escaped) strengverdiene tolket fra malen bokstavelig. Slik får du tilgang til eiendom:

     var name1 = "John", name2 = "Joan"; foo'hello \ $ name1, $ name2, hvordan har du det begge? '; funksjon foo () console.log (argumenter [0]); // Array ["hei $ name1,", ", hvordan har du begge?"] Console.log (argumenter [0] .raw); // Array ["hei \ $ name1,", ", hvordan har du begge?"] Console.log (argumenter [1]); // Joan 
    Bruk tilfeller av merkede maler

    Merkede maler er nyttige når du trenger bryte en streng i separate deler som det er ofte tilfellet i en nettadresse, eller mens du analyserer et språk. Du finner en samling av merkede maleksempler her.

    Annet enn IE, er mal bokstavene støttes i alle de store nettleserne.

    Nedenfor finner du noen eksempler på tagfunksjoner med forskjellige signaturer som representerer argumentene:

     var navnet = "john"; foo'hello $ name, hvordan har du det begge? '; bar'hello $ name, hvordan har du det begge? '; funksjon foo (... args) console.log (args); // Array [Array ["hei", ", hvordan har du begge?"], "John"] funksjonslinjen (strVals, ... exprVals) console.log (strVals); // Array ["hei", "hvordan går det med dere begge?" ] console.log (exprVals); // Array ["John"] 

    I Bar funksjon, den første parameteren (strVals) er den malobjekt og den andre (som bruker spredt syntaks) er en samling som samles alle de evaluerte uttrykkverdiene fra malen bokstavelig passert til funksjonen.

    Sett strengen sammen

    Hvis du vil få hele setningen (avledet fra bokstavelig) inne i tag-funksjonen, sammenkoble alle verdier av arrays som bærer malstrengene og de evaluerte uttrykkverdiene. Som dette:

     funksjon foo (strs, ... exprs) // hvis det er noen uttrykk som er inkludert i bokstavelig hvis (eksprs.length! == 0) var n = strs.length - 1, result = "; for (var i = 0 ; Jeg < n; i++)  result += strs[i] + exprs[i];  result += strs[n]; console.log(result); //"Hello John."  // if there are no expressions included in the literal else console.log(strs[0]);  name = 'John'; foo'Hello $name.'; 

    De MT array holder alle strengene funnet i bokstavelig og exprs holder alle de evaluerte uttrykkverdiene fra det bokstavelige.

    Hvis det til og med finnes en ekspressjonsverdi, sammenkoble hver arrayverdien av MT (unntatt den siste) med samme indeksverdi på exprs. Da, til slutt, legger du til den siste verdien av MT array til den sammenkædede strengen, danner en komplett setning denne måten.