摘要:中的字符串也像那樣支持反斜杠的轉(zhuǎn)移并且字符集方面默認(rèn)為下面就來(lái)詳細(xì)解析中的字符串類型與字符編碼支持定義字符串就是零個(gè)或多個(gè)排在一起的字符,放在單引號(hào)或雙引號(hào)之中。后面緊跟四個(gè)十六進(jìn)制數(shù)到,代表一個(gè)字符。
JavaScript中的字符串也像Python那樣支持反斜杠的轉(zhuǎn)移,并且字符集方面默認(rèn)為Unicode,下面就來(lái)詳細(xì)解析JavaScript中的字符串類型與字符編碼支持
定義 字符串就是零個(gè)或多個(gè)排在一起的字符,放在單引號(hào)或雙引號(hào)之中。
`"abc"` `"abc"`
單引號(hào)字符串的內(nèi)部,可以使用雙引號(hào)。雙引號(hào)字符串的內(nèi)部,可以使用單引號(hào)。
"key = "value"" "It"s a long journey"
上面兩個(gè)都是合法的字符串。如果要在單引號(hào)字符串的內(nèi)部,使用單引號(hào)(或者在雙引號(hào)字符串的內(nèi)部,使用雙引號(hào)),就必須在內(nèi)部的單引號(hào)(或者雙引號(hào))前面加上反斜杠,用來(lái)轉(zhuǎn)義。
`"Did she say "Hello"?"` `// "Did she say "Hello"?"` `"Did she say "Hello"?"` `// "Did she say "Hello"?"`
由于HTML語(yǔ)言的屬性值使用雙引號(hào),所以很多項(xiàng)目約定JavaScript語(yǔ)言的字符串只使用單引號(hào),本教程就遵守這個(gè)約定。當(dāng)然,只使用雙引號(hào)也完全可以。重要的是,堅(jiān)持使用一種風(fēng)格,不要兩種風(fēng)格混合。字符串默認(rèn)只能寫在一行內(nèi),分成多行將會(huì)報(bào)錯(cuò)。
`"a` `b` `c"` `// SyntaxError: Unexpected token ILLEGAL`
上面代碼將一個(gè)字符串分成三行,JavaScript就會(huì)報(bào)錯(cuò)。
如果長(zhǎng)字符串必須分成多行,可以在每一行的尾部使用反斜杠。
`var` `longString =` `"Long ` `long ` `long ` `string"``;` `logString` `// "Long long long string"`
上面代碼表示,加了反斜杠以后,原來(lái)寫在一行的字符串,可以分成多行書(shū)寫。但是,輸出的時(shí)候還是單行,效果與寫在同一行完全一樣。注意,反斜杠的后面必須是換行符,而不能有其他字符(比如空格),否則會(huì)報(bào)錯(cuò)。連接運(yùn)算符(+)可以連接多個(gè)單行字符串,將長(zhǎng)字符串拆成多行書(shū)寫,輸出的時(shí)候也是單行。
`var` `longString =` `"Long "` `+` `"long "` `+` `"long "` `+` `"string"``;`
如果想輸出多行字符串,有一種利用多行注釋的變通方法。
`(``function` `() {` `/*` `line 1` `line 2` `line 3` `*/``}).toString().split(``" "``).slice(1, -1).join(``" "``)` `// "line 1` `// line 2` `// line 3"`
上面的例子中,輸出的字符串就是多行。轉(zhuǎn)義 反斜杠()在字符串內(nèi)有特殊含義,用來(lái)表示一些特殊字符,所以又稱為轉(zhuǎn)義符。
需要用反斜杠轉(zhuǎn)義的特殊字符,主要有下面這些:
0 null(u0000)
b 后退鍵(u0008)
f 換頁(yè)符(u000C)
n 換行符(u000A)
r 回車鍵(u000D)
t 制表符(u0009)
v 垂直制表符(u000B)
" 單引號(hào)(u0027)
" 雙引號(hào)(u0022)
反斜杠(u005C)
上面這些字符前面加上反斜杠,都表示特殊含義。
`console.log(``"1 2"``)` `// 1` `// 2`
上面代碼中,n表示換行,輸出的時(shí)候就分成了兩行。
反斜杠還有三種特殊用法。
(1)HHH
反斜杠后面緊跟三個(gè)八進(jìn)制數(shù)(000到377),代表一個(gè)字符。HHH對(duì)應(yīng)該字符的Unicode碼點(diǎn),比如251表示版權(quán)符號(hào)。顯然,這種方法只能輸出256種字符。
(2)xHH
x后面緊跟兩個(gè)十六進(jìn)制數(shù)(00到FF),代表一個(gè)字符。HH對(duì)應(yīng)該字符的Unicode碼點(diǎn),比如xA9表示版權(quán)符號(hào)。這種方法也只能輸出256種字符。
(3)uXXXX
u后面緊跟四個(gè)十六進(jìn)制數(shù)(0000到FFFF),代表一個(gè)字符。HHHH對(duì)應(yīng)該字符的Unicode碼點(diǎn),比如u00A9表示版權(quán)符號(hào)。
下面是這三種字符特殊寫法的例子。
`"251"` `// "?"` `"xA9"` `// "?"` `"u00A9"` `// "?"` `"172"` `===` `"z"` `// true` `"x7A"` `===` `"z"` `// true` `"u007A"` `===` `"z"` `// true`
如果在非特殊字符前面使用反斜杠,則反斜杠會(huì)被省略。
`"a"` `// "a"`
上面代碼中,a是一個(gè)正常字符,前面加反斜杠沒(méi)有特殊含義,反斜杠會(huì)被自動(dòng)省略。
如果字符串的正常內(nèi)容之中,需要包含反斜杠,則反斜杠前面需要再加一個(gè)反斜杠,用來(lái)對(duì)自身轉(zhuǎn)義。
`"Prev Next"` `// "Prev Next"`
字符串與數(shù)組 字符串可以被視為字符數(shù)組,因此可以使用數(shù)組的方括號(hào)運(yùn)算符,用來(lái)返回某個(gè)位置的字符(位置編號(hào)從0開(kāi)始)。
`var` `s =` `"hello"``;` `s[0]` `// "h"` `s[1]` `// "e"` `s[4]` `// "o"`
// 直接對(duì)字符串使用方括號(hào)運(yùn)算符
"hello"``[1] // "e"如果方括號(hào)中的數(shù)字超過(guò)字符串的長(zhǎng)度,或者方括號(hào)中根本不是數(shù)字,則返回undefined。
`"abc"``[3]` `// undefined` `"abc"``[-1]` `// undefined` `"abc"``[``"x"``]` `// undefined`
但是,字符串與數(shù)組的相似性僅此而已。實(shí)際上,無(wú)法改變字符串之中的單個(gè)字符。
`var` `s =` `"hello"``;` `delete` `s[0];` `s` `// "hello"` `s[1] =` `"a"``;` `s` `// "hello"` `s[5] =` `"!"``;` `s `// "hello"`
上面代碼表示,字符串內(nèi)部的單個(gè)字符無(wú)法改變和增刪,這些操作會(huì)默默地失敗。字符串之所以類似于字符數(shù)組,實(shí)際是由于對(duì)字符串進(jìn)行方括號(hào)運(yùn)算時(shí),字符串會(huì)自動(dòng)轉(zhuǎn)換為一個(gè)字符串對(duì)象。
length屬性 length屬性返回字符串的長(zhǎng)度,該屬性也是無(wú)法改變的。
`var` `s =` `"hello"``;` `s.length` `// 5` `s.length = 3;` `s.length` `// 5` `s.length = 7;` `s.length` `// 5`
上面代碼表示字符串的length屬性無(wú)法改變,但是不會(huì)報(bào)錯(cuò)。字符集 JavaScript使用Unicode字符集,也就是說(shuō)在JavaScript內(nèi)部,所有字符都用Unicode表示。
不僅JavaScript內(nèi)部使用Unicode儲(chǔ)存字符,而且還可以直接在程序中使用Unicode,所有字符都可以寫成”uxxxx”的形式,其中xxxx代表該字符的Unicode編碼。比如,u00A9代表版權(quán)符號(hào)。
`var` `s =` `"u00A9"``;` `s` `// "?"`
每個(gè)字符在JavaScript內(nèi)部都是以16位(即2個(gè)字節(jié))的UTF-16格式儲(chǔ)存。也就是說(shuō),JavaScript的單位字符長(zhǎng)度固定為16位長(zhǎng)度,即2個(gè)字節(jié)。但是,UTF-16有兩種長(zhǎng)度:對(duì)于U+0000到U+FFFF之間的字符,長(zhǎng)度為16位(即2個(gè)字節(jié));對(duì)于U+10000到U+10FFFF之間的字符,長(zhǎng)度為32位(即4個(gè)字節(jié)),而且前兩個(gè)字節(jié)在0xD800到0xDBFF之間,后兩個(gè)字節(jié)在0xDC00到0xDFFF之間。舉例來(lái)說(shuō),U+1D306對(duì)應(yīng)的字符為
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108561.html
摘要:編碼轉(zhuǎn)換為編碼下面讓我們來(lái)看下如何將編碼的數(shù)據(jù)轉(zhuǎn)換為編碼的數(shù)據(jù)。該方法是將碼進(jìn)行編碼轉(zhuǎn)換,從而得到編碼的數(shù)據(jù)。 概述 當(dāng)你在前端需要通過(guò)二進(jìn)制數(shù)據(jù)與服務(wù)端進(jìn)行通信時(shí),你可能會(huì)遇到二進(jìn)制數(shù)據(jù)的編碼問(wèn)題。大部分服務(wù)端的字符串編碼類型都為UTF-8,而JavaScript中字符串編碼類型是UTF-16,因此,你需要一個(gè)能夠?qū)⒆址趦煞N編碼方式間進(jìn)行轉(zhuǎn)換的方法。 本文通過(guò)對(duì)utfx.js這個(gè)...
摘要:事件中屬性等于。響應(yīng)的狀態(tài)為或者。同步在上會(huì)產(chǎn)生頁(yè)面假死的問(wèn)題。表示聲明的變量未初始化,轉(zhuǎn)換為數(shù)值時(shí)為。但并非所有瀏覽器都支持事件捕獲。它由兩部分構(gòu)成函數(shù),以及創(chuàng)建該函數(shù)的環(huán)境。 1 介紹JavaScript的基本數(shù)據(jù)類型Number、String 、Boolean 、Null、Undefined Object 是 JavaScript 中所有對(duì)象的父對(duì)象數(shù)據(jù)封裝類對(duì)象:Object、...
摘要:是什么是一種輕量級(jí)的數(shù)據(jù)交換格式,采用完全獨(dú)立于語(yǔ)言的文本格式,是理想的數(shù)據(jù)交換格式。同時(shí),是原生格式,這意味著在中處理數(shù)據(jù)不需要任何特殊的或工具包。底層存儲(chǔ)為格式是個(gè)構(gòu)建在之上的新型查詢語(yǔ)言。 JSON是什么? JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,采用完全獨(dú)立于語(yǔ)言的文本格式,是理想的數(shù)據(jù)交換格式。同時(shí),JSON是 Java...
閱讀 1045·2023-04-26 01:47
閱讀 1709·2021-11-18 13:19
閱讀 2074·2019-08-30 15:44
閱讀 682·2019-08-30 15:44
閱讀 2340·2019-08-30 15:44
閱讀 1265·2019-08-30 14:06
閱讀 1444·2019-08-30 12:59
閱讀 1919·2019-08-29 12:49