任何一組字元 (字母、數字、符號等),如果夾在雙引號 ("
)、單引號 ('
) 或反斜線 (`) 之間,就是字串原始值。您在本課程中已經看到幾個字串範例:先前單元中的 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."
進行隨堂測驗
哪個字元用於逸出字元?
"
)/
)∖
)串連時要使用哪個字元?
.
+
&