字符串是一個(gè)或多個(gè)字符的序列,可以由字母,數(shù)字或符號(hào)組成。
JavaScript中的字符串是原始數(shù)據(jù)類(lèi)型,并且是不可變的,這意味著它們是不變的。
JavaScript字符串是用引號(hào)括起來(lái)的零個(gè)或多個(gè)字符。
var x = "JavaScript教程 ";測(cè)試看看?/?
在JavaScript中,您可以選擇單引號(hào)或雙引號(hào)來(lái)包裹字符串。以下兩種方法都可以正常工作:
var msg1 = "Hello world"; // 使用雙引號(hào) var msg2 = 'Hello world'; // 使用單引號(hào)測(cè)試看看?/?
您可以在字符串內(nèi)使用引號(hào),只要它們與字符串周?chē)囊?hào)不匹配即可:
var str1 = 'She said "Hey" and left'; // 單引號(hào)中的雙引號(hào) var str2 = "She said 'Hey' and left"; // 雙引號(hào)內(nèi)的單引號(hào) var str3 = "Let's have a cup of tea"; // 雙引號(hào)內(nèi)的單引號(hào) var str4 = 'We\'ll never give up'; // 用反斜杠轉(zhuǎn)義單引號(hào)測(cè)試看看?/?
創(chuàng)建字符串的最新方法稱(chēng)為模板常量(template literal)。
模板常量(template literal)使用反引號(hào)(` `),其工作方式與常規(guī)字符串相同:
var x = `該字符串使用反引號(hào)。`;測(cè)試看看?/?
length屬性返回字符串的長(zhǎng)度。對(duì)于空字符串,長(zhǎng)度為0。
var str = 'JavaScript教程 '; str.length;// return 15測(cè)試看看?/?
注意:空格也算作字符。
串聯(lián)意味著將兩個(gè)或多個(gè)字符串連接在一起以創(chuàng)建新的字符串。
+ 運(yùn)算符用于添加(連接)字符串。
var str1 = "quick brown fox"; var str2 = "over the lazy dog"; var str3 = "The " + str1 + " jumps " + str2;測(cè)試看看?/?
template literal功能的一個(gè)特殊功能是能夠在字符串中包含表達(dá)式和變量。不必使用串聯(lián),我們可以使用${}語(yǔ)法來(lái)插入變量。
var str1 = "quick brown fox"; var str2 = "over the lazy dog"; var str3 = `The ${str1} jumps ${str2}.`;測(cè)試看看?/?
在這種情況下,使用模板常量(template literal)可能會(huì)更易于編寫(xiě)和方便。
因?yàn)樽址仨氂靡?hào)引起來(lái),所以以下內(nèi)容將出錯(cuò),因?yàn)樗鼤?huì)使瀏覽器混淆字符串的結(jié)尾:
var x = 'We'll never give up'; var y = "She said "Hey" and left";
轉(zhuǎn)義序列意味著我們對(duì)它們進(jìn)行操作以確保將其識(shí)別為文本,而不是代碼的一部分。
在JavaScript中,我們通過(guò)在字符\前面加上反斜杠()來(lái)實(shí)現(xiàn)此目的。
Code | 結(jié)果 | 描述 |
---|---|---|
\' | ' | 單引號(hào) |
\" | ” | 雙引號(hào) |
\\ | \ | 反斜杠 |
該序列\(zhòng)' 在字符串中插入一個(gè)單引號(hào):
var x = 'We\'ll never give up';測(cè)試看看?/?
該序列\(zhòng)" 在字符串中插入雙引號(hào):
var x = "She said \"Hey\" and left";測(cè)試看看?/?
該序列\(zhòng)\ 在字符串中插入反斜杠:
var x = "The character \\ is called backslash";測(cè)試看看?/?
JavaScript中還有其他六個(gè)轉(zhuǎn)義序列有效:
Code | 描述 |
---|---|
\b | 退格鍵 |
\f | 換頁(yè) |
\n | 新隊(duì) |
\r | 回車(chē) |
\t | 水平制表符 |
\v | 垂直制表符 |
對(duì)于要使用無(wú)法使用鍵盤(pán)鍵入的字符的情況,轉(zhuǎn)義序列也很有用。
為了獲得最佳可讀性,應(yīng)避免代碼行超過(guò)80個(gè)字符。
如果JavaScript語(yǔ)句不適合一行,則打破它的最佳位置是在運(yùn)算符之后:
document.getElementById("para").innerHTML = "The sum of 20 and 30 is " + sum;測(cè)試看看?/?
在一行上寫(xiě)一個(gè)很長(zhǎng)的字符串將很快變得很難閱讀和使用。
我們可以使用串聯(lián)運(yùn)算符(+)在多行上顯示字符串。
var str = "空氣污染是化學(xué)物質(zhì)進(jìn)入 " + "大氣層。 它破壞環(huán)境平衡并導(dǎo)致 " + "幾種疾病.";測(cè)試看看?/?
除了使用多個(gè)字符串,我們還可以使用\轉(zhuǎn)義符。
var str = "空氣污染是化學(xué)物質(zhì)進(jìn)入 \ 大氣層。 它破壞環(huán)境平衡并導(dǎo)致 \ 幾種疾病.";測(cè)試看看?/?
注意:所述的(\)方法是不優(yōu)選的,因?yàn)樗赡軐?dǎo)致某些瀏覽器和minifiers問(wèn)題。
為了使代碼更具可讀性,我們可以改用模板常量(template literal)字符串。這些消除了對(duì)長(zhǎng)字符串進(jìn)行串聯(lián)或轉(zhuǎn)義的需要。
var str = `空氣污染是化學(xué)物質(zhì)進(jìn)入 大氣層。 它破壞環(huán)境平衡并導(dǎo)致 幾種疾病.`;測(cè)試看看?/?
重要的是要知道創(chuàng)建跨多行的字符串的所有方法,因?yàn)椴煌拇a庫(kù)可能使用各種標(biāo)準(zhǔn)。
通常,JavaScript字符串是從文字創(chuàng)建的原始值:
var city = "New Delhi";
但是,也可以使用 new關(guān)鍵字將字符串定義為對(duì)象:
var city = new String("New Delhi");
為了測(cè)試兩者之間的差異,我們將初始化一個(gè)字符串基元和一個(gè)字符串對(duì)象。
var str1 = "New Delhi"; var str2 = new String("New Delhi"); typeof str1// returns string typeof str2// returns object測(cè)試看看?/?
注意:請(qǐng)勿將字符串創(chuàng)建為對(duì)象。這會(huì)降低執(zhí)行速度,并會(huì)產(chǎn)生一些意外的結(jié)果。
使用==運(yùn)算符時(shí),相等的字符串相同:
var str1 = "New Delhi"; var str2 = new String("New Delhi"); document.write(str1 == str2); //返回 true,因?yàn)?nbsp;str1和 str2的值相等測(cè)試看看?/?
使用===運(yùn)算符時(shí),相等的字符串不相同,因?yàn)?==運(yùn)算符期望值和類(lèi)型都相等:
var str1 = "New Delhi"; var str2 = new String("New Delhi"); document.write(str1 === str2); //返回false,因?yàn)閟tr1和str2的類(lèi)型不同測(cè)試看看?/?
無(wú)法比較對(duì)象:
var str1 = new String("New Delhi"); var str2 = new String("New Delhi"); document.write(str1 == str2); //因?yàn)閟tr1和str2是不同的對(duì)象,所以返回false document.write(str1 === str2); //因?yàn)閟tr1和str2是不同的對(duì)象,所以返回false測(cè)試看看?/?
注意(==)和(===)之間的區(qū)別。比較兩個(gè)JavaScript對(duì)象將始終返回false。