W JavaScripcie † wydaje się działać tak samo jak pojedynczy cytat. Na przykład mogę użyć znaku wstecznego, aby zdefiniować ciąg taki jak ten:
var s = `abc`;
Czy istnieje sposób, w jaki zachowanie backticka faktycznie różni się od zachowania pojedynczego cytatu?
† Zauważ, że wśród programistów „backtick” to jedna z nazw tego, co jest bardziej ogólnie nazywane poważnym akcentem . Programiści czasami używają alternatywnych nazw „backquote” i „backgrave”. Również w stosie przepełnienia stosu i gdzie indziej, inne popularne pisowni dla „backtick” to „back-tick” i „back tick”.
Odpowiedzi:
Jest to funkcja zwana literałami szablonów .
Były one nazywane „ciągami szablonów” we wcześniejszych wydaniach specyfikacji ECMAScript 2015.
Literały szablonów są obsługiwane przez przeglądarki Firefox 34, Chrome 41 i Edge 12 i nowsze, ale nie przez Internet Explorer.
Literały szablonowe mogą być używane do reprezentowania ciągów wieloliniowych i mogą wykorzystywać „interpolację” do wstawiania zmiennych:
Wynik:
Co ważniejsze, mogą zawierać nie tylko nazwę zmiennej, ale dowolne wyrażenie JavaScript:
źródło
["a", "b"].join(""); // both string elements written in new lines
. Ale oprócz tego można użyć „transpilatora”, takiego jak Babel, aby przekonwertować ES6 + na ES5alert`1`
.ECMAScript 6 oferuje nowy typ literału łańcuchowego, wykorzystujący backstick jako separator. Te literały pozwalają na osadzenie podstawowych wyrażeń interpolacyjnych, które są następnie automatycznie analizowane i analizowane.
Jak widać, użyliśmy
`
około szeregu znaków, które są interpretowane jako dosłowny ciąg znaków, ale wszelkie wyrażenia formy${..}
są analizowane i przetwarzane bezpośrednio w tekście.Jedną naprawdę fajną zaletą interpolowanych literałów łańcuchowych jest to, że mogą one dzielić się na wiele linii:
Wyrażenia interpolowane
Dowolne prawidłowe wyrażenie może pojawiać się wewnątrz
${..}
interpolowanego literału łańcuchowego, w tym wywołania funkcji, wbudowane wywołania wyrażenia funkcyjnego, a nawet inne interpolowane łańcuchy literalne!Tutaj wewnętrzny
`${who}s`
interpolowany literał łańcuchowy był dla nas nieco przyjemniejszy, gdy łączyliśmywho
zmienną z"s"
łańcuchem, w przeciwieństwie dowho + "s"
. Aby zachować notatkę, interpolowany łańcuch literalny jest po prostu leksykalny o zasięgu, w którym się pojawia, a nie dynamicznie w żaden sposób:Używanie szablonu HTML w literaturze jest zdecydowanie bardziej czytelne dzięki zmniejszeniu irytacji.
Prosty stary sposób:
Z ECMAScript 6:
Oznaczone literały szablonów
Możemy również otagować ciąg szablonu, gdy ciąg szablonu jest oznakowany, literały i podstawienia są przekazywane do funkcji, która zwraca wynikową wartość.
Możemy tutaj użyć operatora rozkładania, aby przekazać wiele wartości. Pierwszy argument - nazwaliśmy go łańcuchami - to tablica wszystkich prostych łańcuchów (między dowolnymi interpolowanymi wyrażeniami).
Następnie zebrać wszystkie kolejne argumenty do tablicy zwanych wartości używając
... gather/rest operator
, choć może oczywiście nie zostawili je jako pojedyncze nazwanych parametrów następujących ciągów parametrów jak zrobiliśmy powyżej (value1
,value2
etc.).Argumenty zebrane w naszej tablicy wartości są wynikami już ocenionych wyrażeń interpolacyjnych znalezionych w literale ciągu. Znakowany literał łańcucha jest jak etap przetwarzania po ocenie interpolacji, ale przed skompilowaniem końcowej wartości ciągu, co pozwala na większą kontrolę nad generowaniem łańcucha z literału. Spójrzmy na przykład tworzenia szablonów wielokrotnego użytku.
Surowe struny
Nasze funkcje znaczników otrzymują pierwszy argument, który nazywamy ciągami, którym jest tablica. Ale zawiera dodatkowy bit danych: nieprzetworzone nieprzetworzone wersje wszystkich ciągów. Możesz uzyskać dostęp do tych nieprzetworzonych wartości ciągów za pomocą
.raw
właściwości:Jak widać, nieprzetworzona wersja ciągu zachowuje
\n
sekwencję zmiany znaczenia, a przetworzona wersja ciągu traktuje go jak prawdziwą nową linię bez zmian. ECMAScript 6 pochodzi z wbudowanej funkcji, które mogą być używane jako znak ciągiem znaków:String.raw(..)
. Po prostu przechodzi przez surowe wersje ciągów:źródło
myTaggedLiteral`test ${someText} ${2 + 3}`;
powinny być//["test ", " "]
(tzn. Nie przycięte ciągi znaków).Backticks (
`
) służą do definiowania literałów szablonów. Literały szablonów to nowa funkcja w ECMAScript 6, która ułatwia pracę z łańcuchami.Cechy:
Uwaga: możemy łatwo używać pojedynczych cudzysłowów (
'
) i podwójnych cudzysłowów ("
) w backticks (`
).Przykład:
Aby interpolować zmienne lub wyrażenie, możemy do tego użyć
${expression}
zapisu.Ciągi wielowierszowe oznaczają, że nie musisz już używać
\n
nowych linii.Przykład:
Wynik:
źródło
Backticks otaczają literały szablonów, wcześniej znane jako ciągi szablonów. Literały szablonów są literałami ciągów, które umożliwiają osadzanie wyrażeń i interpolację ciągów.
Literały szablonów mają wyrażenia osadzone w symbolach zastępczych, oznaczone znakiem dolara i nawiasami klamrowymi wokół wyrażenia, tj
${expression}
. Symbol zastępczy / wyrażenia są przekazywane do funkcji. Domyślna funkcja po prostu łączy łańcuch.Aby uniknąć ucieczki, umieść przed nią odwrotny ukośnik:
Użyj kursorów tylnych, aby łatwiej pisać ciągi wieloliniowe:
lub
vs. waniliowy JavaScript:
lub
Sekwencje ewakuacyjne:
\u
, na przykład\u00A9
\u{}
, na przykład\u{2F804}
\x
Na przykład ucieczki szesnastkowe\xA9
\
(a) cyfrę (y)\251
źródło
Podsumowanie:
Backticks w JavaScript to funkcja, która została wprowadzona w ECMAScript 6 // ECMAScript 2015 w celu tworzenia łatwych ciągów dynamicznych. Ta funkcja ECMAScript 6 jest również nazywana literałem ciągu znaków . Oferuje następujące zalety w porównaniu z normalnymi łańcuchami:
''
lub""
) nie mogą mieć podziałów wierszy.${myVariable}
składni.Przykład:
Kompatybilność z przeglądarkami:
Dosłowne ciągi szablonów są natywnie obsługiwane przez wszystkich głównych dostawców przeglądarek (oprócz Internet Explorera). Jest więc dość bezpieczny w użyciu w kodzie produkcyjnym. Bardziej szczegółową listę kompatybilności przeglądarki można znaleźć tutaj .
źródło
Oprócz interpolacji łańcuchów, możesz także wywołać funkcję za pomocą back-tick.
Sprawdź stylizowany komponent . Używają go intensywnie.
źródło
Najlepsze jest to, że możemy tworzyć podstawowe matematyki bezpośrednio:
Stał się naprawdę przydatny w funkcji fabrycznej:
źródło