Ciąg znaków

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?

Ukośnik odwrotny ()
Podwójny cudzysłów (")
ukośnik prawy (/);

Który znak jest używany do konkatenacji?

+
&
.