Każdy zestaw znaków (litery, cyfry, symbole itp.) między podwójnymi cudzysłowami ("
), pojedynczymi cudzysłowami ('
) lub ukośnikami (`) jest typem ciągu. W tym kursie już widziałeś kilka przykładów ciągów znaków: wystąpienia console.log
w poprzednim module zawierały prymitywne ciągi znaków.
console.log( "Hello, World." );
> Hello, World.
"Hello, World."
to ciąg znaków. Ten sam wynik uzyskasz, używając cudzysłowów pojedynczych lub cudzysłowów łamanych:
console.log( 'Hello, World.' );
> Hello, World.
console.log(`Hello, World.`);
> Hello, World.
Użycie znaków cudzysłownych do oznaczenia ciągu znaków nazywa się literałem ciągu znaków. Cudzysłowy podwójne i pojedyncze działają tak samo i można je umieszczać w cudzysłowach jako znaki w cudzysłowach:
console.log( "I'm a string." );
> I'm a string.
console.log( '"A string," I said.' );
> "A string," I said.
Występowanie tego samego znaku otaczającego w ciągu, który „zamyka” ciąg znaków, prawdopodobnie powoduje błędy:
console.log( '"I'm a string," I said.' );
> Uncaught SyntaxError: missing ) after argument list
Aby tego uniknąć, poprzedź znak ukośnikiem lewym (\
):
console.log( '"I\'m a string," I said.' );
> "I'm a string," I said.
Obiekt ciągu znaków
Gdy jest wywoływany jako funkcja, obiekt String
zamienia określoną wartość na literał ciągu znaków.
let myString = String( 10 );
myString
> "10"
typeof myString
> string
Jak opisano w artykule Następowanie prototypu, rzadko będziesz używać obiektu String
jako konstruktora. Zamiast literału ciągu znaków tworzy obiekt ciągu znaków zawierający określoną wartość oraz metody i właściwości dostępne już w obiekcie String
.
let stringObj = new String( "My new string." );
typeof stringObj
> object
stringObj
> String { "My new string." }
Konkatenacja
Gdy jest używany w kontekście ciągów znaków zamiast liczb, pojedynczy znak plusa (+
) działa jako operator łączenia, łącząc wiele wartości ciągu w jeden ciąg:
console.log( "My" + " string." );
> My string.
Literały ciągu znaków i literały szablonu
Do tworzenia prymitywnych ciągów znaków można używać pojedynczych cudzysłowów, podwójnych cudzysłowów i znaków ukośnika. Możesz też użyć cudzysłowów, aby określić literaly szablonu (czasami nazywane „ciągłymi ciągami znaków szablonu”). W przeciwieństwie do literalów ciągu znaków tworzonych za pomocą pojedynczych lub podwójnych cudzysłowów literaly szablonu umożliwiają stosowanie wielowierszowych ciągów znaków i interpolację ciągu znaków.
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.
Literaly szablonu mogą zawierać wyrażenia zastępcze oznaczone znakiem dolara i nawiasami klamrowymi (${}
). Te zmienne są domyślnie „interpolowane”, co oznacza, że wynik wyrażenia zastępczego zastępuje zmienną w dodatkowym ciągu znaków.
console.log( "The result is " + ( 2 + 4 ) + "." );
> The result is 6.
console.log( `The result is ${ 2 + 4 }.` );
> The result is 6.
Szablon literalny może zostać przekazany do funkcji niestandardowej, aby utworzyć otagowany szablon, czyli wywołanie funkcji, które używa pojedynczego literalu szablonu jako zbioru argumentów i umożliwia wypełnianie jego obiektów zastępczych na podstawie logiki zdefiniowanej przez autora.
Pierwszy argument funkcji tagu zawiera tablicę wartości ciągu znaków, a pozostałe definiują obiekty zastępcze. Ta tablica wartości ciągu znaków jest tworzona przez „rozdzielenie” literalu szablonu na poszczególne obiekty zastępcze. Pierwszy element tablicy zawiera dowolne znaki do pierwszego placeholdera, drugi – dowolne znaki między pierwszym a drugim placeholderem itd. Każdy placeholder jest przekazywany do funkcji tagu jako samodzielna wartość z powiązanym placeholderem.
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."
Sprawdź swoją wiedzę
Który znak jest używany do zmiany znaczenia znaków?
∖
)"
)/
);Który znak jest używany do konkatenacji?
+
&
.