字串

任何一組字元 (字母、數字、符號等),如果夾在雙引號 (")、單引號 (') 或反斜線 (`) 之間,就是字串原始值。您在本課程中已經看到幾個字串範例:先前單元中的 console.log 例項包含字串原始類型。

console.log( "Hello, World." );
> Hello, World.

"Hello, World." 是字串原始類型。使用單引號或反引號也會得到相同的結果:

console.log( 'Hello, World.' );
> Hello, World.

console.log(`Hello, World.`);
> Hello, World.

由引號包圍的字元組合稱為字串常值。雙引號和單引號的運作方式相同,且一個引號可以包含另一個引號,做為字串中的字元:

console.log( "I'm a string." );
> I'm a string.

console.log( '"A string," I said.' );
> "A string," I said.

字串中同一個封閉字元會「關閉」字串,可能導致錯誤:

console.log( '"I'm a string," I said.' );
> Uncaught SyntaxError: missing ) after argument list

如要避免這種情況,請使用反斜線 (\) 逸出字元:

console.log( '"I\'m a string," I said.' );
> "I'm a string," I said.

字串物件

String 物件以函式呼叫時,會將指定值強制轉換為字串文字。

let myString = String( 10 );

myString
> "10"

typeof myString
> string

原型繼承一文所述,您幾乎不需要將 String 物件用於建構函式。它會建立包含指定值的字串物件,以及 String 物件已提供的方法和屬性,而非字串文字。

let stringObj = new String( "My new string." );

typeof stringObj
> object

stringObj
> String { "My new string." }

串連

當單一加號 (+) 用於字串而非數字時,會做為串連運算子,將多個字串值合併為單一字串:

console.log( "My" + " string." );
> My string.

字串常值和範本常值

您可以交替使用單引號、雙引號和反斜線來建立字串原始值。不過,您也可以使用反引號指定範本字面值 (有時稱為「範本字串」)。與使用單引號或雙引號建立的字串文字常值不同,範本文字常值可用於多行字串和字串插補。

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.

範本字面值可包含以美元符號和大括號 (${}) 標示的預留位置運算式。這些預留位置預設為「插補」,也就是說,運算式的結果會取代最終字串中的預留位置。

console.log( "The result is " + ( 2 + 4 ) + "." );
> The result is 6.
console.log( `The result is ${ 2 + 4 }.` );
> The result is 6.

範本字面值可傳遞至自訂函式,以建立標記範本,這是一種函式呼叫,會將單一範本字面值用作一組引數,並讓預留位置根據作者定義的邏輯填入內容。

代碼函式的第 1 個引數包含字串值陣列,而其餘引數則定義預留位置。這個字串值陣列是透過在範本字面值中包含的每個預留位置「分割」範本字面值而建立。陣列中的第一個元素包含第一個預留位置之前的任何字元,第二個元素包含第一個和第二個預留位置之間的任何字元,依此類推。每個預留位置都會以獨立值的形式傳遞至代碼函式,並與相關聯的預留位置搭配使用。

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."

進行隨堂測驗

哪個字元用於逸出字元?

雙引號 (")
正斜線 (/)
反斜線 ()

串連時要使用哪個字元?

.
+
&