JavaScript中的字符串
在JavaScript中,用于表示文本的類型稱為字符串(String)。字符串是一個(gè)不可變的有序序列,由16位值組成,其中每個(gè)值代表一個(gè)Unicode字符。字符串的length
屬性表示它包含的16位值的數(shù)量。JavaScript的字符串(以及數(shù)組)使用從零開始的索引,因此第一個(gè)16位值的索引是0,第二個(gè)值的索引是1,依此類推??兆址拈L度為0。JavaScript沒有單獨(dú)的類型來表示字符串中的單個(gè)字符。要表示一個(gè)16位值,可以使用長度為1的字符串。
1. 字符串字面量。
在JavaScript程序中包含字符串,您可以將它們包含在匹配的單引號(hào)、雙引號(hào)或反引號(hào)(`'
")中。雙引號(hào)和反引號(hào)可以出現(xiàn)在由單引號(hào)限定的字符串中,反之亦然。以下是一些字符串字面量的示例:
使用反引號(hào)作為字符串定界符是ES6的一個(gè)功能,允許您在字符串字面量中包含(或插值)JavaScript表達(dá)式。在早期版本的JavaScript中,字符串字面量必須在一行上,而+
運(yùn)算符用于將單行字符串連接成更長的字符串。在ES5中,您可以使用反斜杠(\
)將單行字符串分成多行。反斜杠和緊隨其后的行終止符不是字符串字面量的一部分。如果需要在單引號(hào)或雙引號(hào)括起的字符串中包含換行符,可以使用字符序列\n
。ES6的反引號(hào)語法支持多行字符串,并且行終止符被視為字符串字面量的一部分:
在使用單引號(hào)作為字符串定界符時(shí),您需要注意縮略詞和所有格,例如"can't"中的撇號(hào)。由于撇號(hào)是定界符,必須使用反斜杠字符(\
)“轉(zhuǎn)義”字符串中出現(xiàn)的任何撇號(hào)。
在客戶端JavaScript編程中,您的代碼可能包含帶有HTML代碼的字符串,而HTML代碼可能包含JavaScript。與JavaScript類似,HTML使用單引號(hào)或雙引號(hào)作為字符串的定界符。因此,如果需要混合JavaScript和HTML代碼,最好使用不同類型的引號(hào)。在下面的示例中,JavaScript表達(dá)式中的字符串"Thank you"使用單引號(hào),而HTML事件處理程序?qū)傩允褂秒p引號(hào):
(程序員的軟技能:ke.qq.com/course/6034346)
2. 字符串字面量中的轉(zhuǎn)義序列。
在JavaScript字符串中,反斜杠具有特殊作用。它與其后的字符結(jié)合,用于表示字符串中無法直接表示的字符。例如,\n
是一個(gè)轉(zhuǎn)義序列,表示換行符。
我們之前提到了另一個(gè)例子:\'
,它表示單引號(hào)(或撇號(hào))字符。這個(gè)轉(zhuǎn)義序列用于在單引號(hào)字符串中包含撇號(hào)。之所以稱為轉(zhuǎn)義序列,是因?yàn)榉葱备苄薷牧撕竺孀址耐ǔ:x。經(jīng)過轉(zhuǎn)義后,它不再表示字符串的結(jié)尾,而是表示撇號(hào)本身:
以下是JavaScript中的轉(zhuǎn)義序列列表及其表示的字符。有三個(gè)通用的轉(zhuǎn)義序列,可以使用十六進(jìn)制形式的Unicode字符代碼指定任何字符。例如,\xA9
表示版權(quán)符號(hào),使用其十六進(jìn)制的Unicode代碼點(diǎn)來指定。同樣,\u03c0
表示字符π,而\u{1f600}
表示"笑臉"表情符號(hào),使用4位或最多6位十六進(jìn)制代碼點(diǎn)來指定(ES6):
空字符(
\u0000
):\0
退格(
\u0008
):\b
水平制表符(
\u0009
):\t
換行符(
\u000A
):\n
垂直制表符(
\u000B
):\v
換頁符(
\u000C
):\f
回車(
\u000D
):\r
雙引號(hào)(
\u0022
):\"
單引號(hào)或撇號(hào)(
\u0027
):\'
反斜杠(
\u005C
):\\
由2位十六進(jìn)制數(shù)字
nn
指定的Unicode字符:\xnn
由4位十六進(jìn)制數(shù)字
nnnn
指定的Unicode字符:\unnnn
由代碼點(diǎn)
n
在0和10FFFF之間指定的Unicode字符,使用1到6位十六進(jìn)制數(shù)字(ES6):\u{n}
如果\
字符前面的字符不是上述列出的字符之一,反斜杠將被忽略(當(dāng)然,將來的語言版本可能會(huì)定義新的轉(zhuǎn)義序列)。例如,\#
等同于#
。最后,在ES5中,您可以在換行字符前面放置一個(gè)反斜杠,以將字符串字面量分割成多行。
(程序員的軟技能:ke.qq.com/course/6034346)
3. 使用字符串。
字符串連接是JavaScript的固有特性。如果將+
運(yùn)算符與數(shù)字一起使用,數(shù)字將相加。當(dāng)與字符串一起使用時(shí),字符串將被連接在一起(第二個(gè)字符串跟隨在第一個(gè)之后)。例如:
可以使用標(biāo)準(zhǔn)的相等(==
)和不相等(!=
)運(yùn)算符進(jìn)行字符串比較。只有當(dāng)兩個(gè)字符串具有完全相同的16位值序列時(shí),它們才被認(rèn)為是相等的。還可以使用<=
、>
和>=
運(yùn)算符進(jìn)行字符串比較,比較是基于它們的16位值的比較。
要確定字符串的長度(即包含的16位值的數(shù)量),可以使用字符串的length
屬性:
除了length
屬性外,JavaScript還提供了豐富的API來操作字符串:
請(qǐng)記住,JavaScript字符串是不可變的。像replace()
和toUpperCase()
這樣的方法會(huì)返回新的字符串;它們不會(huì)修改調(diào)用它們的原始字符串。字符串也可以像只讀數(shù)組一樣對(duì)待,可以使用方括號(hào)而不是charAt()
方法訪問單個(gè)字符(16位值):
(程序員的軟技能:ke.qq.com/course/6034346)
4. 模板字符串。
在ES6及更高版本中,可以使用反引號(hào)來界定字符串字面量:
然而,這不僅僅是新的字符串字面量語法,因?yàn)槟0遄址梢园我獾腏avaScript表達(dá)式。反引號(hào)內(nèi)的字符串字面量的值通過評(píng)估其中包含的所有表達(dá)式來計(jì)算,將這些表達(dá)式的值轉(zhuǎn)換為字符串,然后將這些字符串與反引號(hào)內(nèi)的字面量組合在一起:
${
和}
之間的內(nèi)容被解釋為JavaScript表達(dá)式,而這些花括號(hào)之外的內(nèi)容被視為常規(guī)字符串字面量?;ɡㄌ?hào)內(nèi)的表達(dá)式會(huì)被評(píng)估、轉(zhuǎn)換為字符串,并插入到模板中,替換掉美元符號(hào)、花括號(hào)和其中的所有內(nèi)容。
模板字符串可以包含任意數(shù)量的表達(dá)式、在常規(guī)字符串中可能出現(xiàn)的任何轉(zhuǎn)義字符,并且它們可以跨多行而不需要特殊轉(zhuǎn)義。以下模板字符串包含4個(gè)JavaScript表達(dá)式、1個(gè)Unicode轉(zhuǎn)義序列和至少4個(gè)換行字符(表達(dá)式的值也可以包含換行字符):
第一行末尾的反斜杠會(huì)轉(zhuǎn)義第一個(gè)換行字符,因此結(jié)果字符串的第一個(gè)字符是Unicode字符 ? (\u2718
),而不是換行字符。
帶標(biāo)簽的模板字符串。
模板字符串具有強(qiáng)大但不常用的功能:如果在開頭的反引號(hào)之前有一個(gè)函數(shù)名(標(biāo)簽),則文本和模板字符串中的表達(dá)式的值將作為參數(shù)傳遞給該函數(shù)。"標(biāo)記模板字符串"的值是該函數(shù)的返回值。此功能可用于在插入HTML或SQL之前對(duì)文本進(jìn)行轉(zhuǎn)義。
ES6提供了一個(gè)名為String.raw()
的內(nèi)置標(biāo)簽函數(shù)。該函數(shù)返回從反引號(hào)中獲取的原始未處理文本,不處理任何反斜杠轉(zhuǎn)義:
請(qǐng)注意,盡管標(biāo)記模板字符串的標(biāo)簽部分是一個(gè)函數(shù),但在調(diào)用它時(shí)沒有括號(hào)。在這個(gè)非常特殊的情況下,反引號(hào)充當(dāng)了開頭和結(jié)尾的括號(hào)。
(程序員的軟技能:ke.qq.com/course/6034346)
5. 模式匹配。
JavaScript定義了一種稱為正則表達(dá)式(或RegExp)的數(shù)據(jù)類型,用于描述和匹配文本中的字符串模式。RegExp并不是JavaScript中的基本類型,但它們具有類似于數(shù)字和字符串的字面語法,有時(shí)會(huì)被視為基本類型。正則表達(dá)式字面量的語法復(fù)雜,它們定義的API也不是很簡單。由于正則表達(dá)式的強(qiáng)大以及它們?cè)谖谋咎幚碇械某R娪猛荆覍⑻峁┮粋€(gè)簡要概述。
一對(duì)斜杠之間的文本構(gòu)成了一個(gè)正則表達(dá)式字面量。在這對(duì)斜杠的第二個(gè)斜杠之后,可以出現(xiàn)一個(gè)或多個(gè)字母,這些字母會(huì)修改模式的含義。例如:
RegExp對(duì)象定義了一些有用的方法,字符串也有一些方法可以接受RegExp參數(shù)。例如:
(程序員的軟技能:ke.qq.com/course/6034346)