中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

解析JavaScript中的字符串類型與字符編碼支持
來源:易賢網 閱讀:1183 次 日期:2016-07-12 15:58:29
溫馨提示:易賢網小編為您整理了“解析JavaScript中的字符串類型與字符編碼支持”,方便廣大網友查閱!

定義

字符串就是零個或多個排在一起的字符,放在單引號或雙引號之中。

'abc'

"abc"

單引號字符串的內部,可以使用雙引號。雙引號字符串的內部,可以使用單引號。

'key = "value"'

"It's a long journey"

上面兩個都是合法的字符串。

如果要在單引號字符串的內部,使用單引號(或者在雙引號字符串的內部,使用雙引號),就必須在內部的單引號(或者雙引號)前面加上反斜杠,用來轉義。

'Did she say \'Hello\'?'

// "Did she say 'Hello'?"

"Did she say \"Hello\"?"

// "Did she say "Hello"?"

由于HTML語言的屬性值使用雙引號,所以很多項目約定JavaScript語言的字符串只使用單引號,本教程就遵守這個約定。當然,只使用雙引號也完全可以。重要的是,堅持使用一種風格,不要兩種風格混合。

字符串默認只能寫在一行內,分成多行將會報錯。

'a

b

c'

// SyntaxError: Unexpected token ILLEGAL

上面代碼將一個字符串分成三行,JavaScript就會報錯。

如果長字符串必須分成多行,可以在每一行的尾部使用反斜杠。

var longString = "Long \

long \

long \

string";

longString

// "Long long long string"

上面代碼表示,加了反斜杠以后,原來寫在一行的字符串,可以分成多行書寫。但是,輸出的時候還是單行,效果與寫在同一行完全一樣。注意,反斜杠的后面必須是換行符,而不能有其他字符(比如空格),否則會報錯。

連接運算符(+)可以連接多個單行字符串,將長字符串拆成多行書寫,輸出的時候也是單行。

var longString = 'Long '

 + 'long '

 + 'long '

 + 'string';

如果想輸出多行字符串,有一種利用多行注釋的變通方法。

(function () { /*

line 1

line 2

line 3

*/}).toString().split('\n').slice(1, -1).join('\n')

// "line 1

// line 2

// line 3"

上面的例子中,輸出的字符串就是多行。

轉義

反斜杠(\)在字符串內有特殊含義,用來表示一些特殊字符,所以又稱為轉義符。

需要用反斜杠轉義的特殊字符,主要有下面這些:

\0 null(\u0000)

\b 后退鍵(\u0008)

\f 換頁符(\u000C)

\n 換行符(\u000A)

\r 回車鍵(\u000D)

\t 制表符(\u0009)

\v 垂直制表符(\u000B)

\' 單引號(\u0027)

\" 雙引號(\u0022)

\ 反斜杠(\u005C)

上面這些字符前面加上反斜杠,都表示特殊含義。

console.log('1\n2')

// 1

// 2

上面代碼中,\n表示換行,輸出的時候就分成了兩行。

反斜杠還有三種特殊用法。

(1)\HHH

反斜杠后面緊跟三個八進制數(000到377),代表一個字符。HHH對應該字符的Unicode碼點,比如\251表示版權符號。顯然,這種方法只能輸出256種字符。

(2)\xHH

\x后面緊跟兩個十六進制數(00到FF),代表一個字符。HH對應該字符的Unicode碼點,比如\xA9表示版權符號。這種方法也只能輸出256種字符。

(3)\uXXXX

\u后面緊跟四個十六進制數(0000到FFFF),代表一個字符。HHHH對應該字符的Unicode碼點,比如\u00A9表示版權符號。

下面是這三種字符特殊寫法的例子。

'\251' // "©"

'\xA9' // "©"

'\u00A9' // "©"

'\172' === 'z' // true

'\x7A' === 'z' // true

'\u007A' === 'z' // true

如果在非特殊字符前面使用反斜杠,則反斜杠會被省略。

'\a'

// "a"

上面代碼中,a是一個正常字符,前面加反斜杠沒有特殊含義,反斜杠會被自動省略。

如果字符串的正常內容之中,需要包含反斜杠,則反斜杠前面需要再加一個反斜杠,用來對自身轉義。

"Prev \\ Next"

// "Prev \ Next"

字符串與數組

字符串可以被視為字符數組,因此可以使用數組的方括號運算符,用來返回某個位置的字符(位置編號從0開始)。

var s = 'hello';

s[0] // "h"

s[1] // "e"

s[4] // "o"

// 直接對字符串使用方括號運算符

'hello'[1] // "e"

如果方括號中的數字超過字符串的長度,或者方括號中根本不是數字,則返回undefined。

'abc'[3] // undefined

'abc'[-1] // undefined

'abc'['x'] // undefined

但是,字符串與數組的相似性僅此而已。實際上,無法改變字符串之中的單個字符。

var s = 'hello';

delete s[0];

s // "hello"

s[1] = 'a';

s // "hello"

s[5] = '!';

s // "hello"

上面代碼表示,字符串內部的單個字符無法改變和增刪,這些操作會默默地失敗。

字符串之所以類似于字符數組,實際是由于對字符串進行方括號運算時,字符串會自動轉換為一個字符串對象。

length屬性

length屬性返回字符串的長度,該屬性也是無法改變的。

var s = 'hello';

s.length // 5

s.length = 3;

s.length // 5

s.length = 7;

s.length // 5

上面代碼表示字符串的length屬性無法改變,但是不會報錯。

字符集

JavaScript使用Unicode字符集,也就是說在JavaScript內部,所有字符都用Unicode表示。

不僅JavaScript內部使用Unicode儲存字符,而且還可以直接在程序中使用Unicode,所有字符都可以寫成”\uxxxx”的形式,其中xxxx代表該字符的Unicode編碼。比如,\u00A9代表版權符號。

var s = '\u00A9';

s // "©"

每個字符在JavaScript內部都是以16位(即2個字節)的UTF-16格式儲存。也就是說,JavaScript的單位字符長度固定為16位長度,即2個字節。

但是,UTF-16有兩種長度:對于U+0000到U+FFFF之間的字符,長度為16位(即2個字節);對于U+10000到U+10FFFF之間的字符,長度為32位(即4個字節),而且前兩個字節在0xD800到0xDBFF之間,后兩個字節在0xDC00到0xDFFF之間。舉例來說,U+1D306對應的字符為𝌆,它寫成UTF-16就是0xD834 0xDF06。瀏覽器會正確將這四個字節識別為一個字符,但是JavaScript內部的字符長度總是固定為16位,會把這四個字節視為兩個字符。

var s = '\uD834\uDF06';

s // "𝌆"

s.length // 2

/^.$/.test(s) // false

s.charAt(0) // ""

s.charAt(1) // ""

s.charCodeAt(0) // 55348

s.charCodeAt(1) // 57094

上面代碼說明,對于于U+10000到U+10FFFF之間的字符,JavaScript總是視為兩個字符(字符的length屬性為2),用來匹配單個字符的正則表達式會失敗(JavaScript認為這里不止一個字符),charAt方法無法返回單個字符,charCodeAt方法返回每個字節對應的十進制值。

所以處理的時候,必須把這一點考慮在內。對于4個字節的Unicode字符,假定C是字符的Unicode編號,H是前兩個字節,L是后兩個字節,則它們之間的換算關系如下。

// 將大于U+FFFF的字符,從Unicode轉為UTF-16

H = Math.floor((C - 0x10000) / 0x400) + 0xD800

L = (C - 0x10000) % 0x400 + 0xDC00

// 將大于U+FFFF的字符,從UTF-16轉為Unicode

C = (H - 0xD800) * 0x400 + L - 0xDC00 + 0x10000

下面的正則表達式可以識別所有UTF-16字符。

([\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF])

由于JavaScript引擎(嚴格說是ES5規格)不能自動識別輔助平面(編號大于0xFFFF)的Unicode字符,導致所有字符串處理函數遇到這類字符,都會產生錯誤的結果。如果要完成字符串相關操作,就必須判斷字符是否落在0xD800到0xDFFF這個區間。

下面是能夠正確處理字符串遍歷的函數。

function getSymbols(string) {

 var length = string.length;

 var index = -1;

 var output = [];

 var character;

 var charCode;

 while (++index < length) {

  character = string.charAt(index);

  charCode = character.charCodeAt(0);

  if (charCode >= 0xD800 && charCode <= 0xDBFF) {

   output.push(character + string.charAt(++index));

  } else {

   output.push(character);

  }

 }

 return output;

}

var symbols = getSymbols('𝌆');

symbols.forEach(function(symbol) {

 // ...

});

替換(String.prototype.replace)、截取子字符串(String.prototype.substring, String.prototype.slice)等其他字符串操作,都必須做類似的處理。

Base64轉碼

Base64是一種編碼方法,可以將任意字符轉成可打印字符。使用這種編碼方法,主要不是為了加密,而是為了不出現特殊字符,簡化程序的處理。

JavaScript原生提供兩個Base64相關方法。

btoa():字符串或二進制值轉為Base64編碼

atob():Base64編碼轉為原來的編碼

var string = 'Hello World!';

btoa(string) // "SGVsbG8gV29ybGQh"

atob('SGVsbG8gV29ybGQh') // "Hello World!"

這兩個方法不適合非ASCII碼的字符,會報錯。

btoa('你好')

// Uncaught DOMException: The string to be encoded contains characters outside of the Latin1 range.

要將非ASCII碼字符轉為Base64編碼,必須中間插入一個轉碼環節,再使用這兩個方法。

function b64Encode(str) {

 return btoa(encodeURIComponent(str));

}

function b64Decode(str) {

 return decodeURIComponent(atob(str));

}

b64Encode('你好') // "JUU0JUJEJUEwJUU1JUE1JUJE"

b64Decode('JUU0JUJEJUEwJUU1JUE1JUJE') // "你好"

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
国产精品每日更新| 国产欧美日韩三级| 欧美chengren| 国产欧美日韩综合| 欧美亚洲在线观看| 韩国精品主播一区二区在线观看| 久久精品视频免费播放| 一区免费观看| 欧美日本精品在线| 亚洲在线观看视频网站| 国产精品一区二区欧美| 久久久最新网址| 亚洲美女在线视频| 国产精品视频自拍| 欧美~级网站不卡| 一区二区三区波多野结衣在线观看| 欧美视频不卡| 久久精品视频在线看| 日韩西西人体444www| 国产欧美精品一区二区色综合 | 精品成人一区二区三区四区| 欧美成人免费全部| 亚洲欧美日韩国产综合精品二区| 国内精品视频666| 欧美久久在线| 久久婷婷综合激情| 亚洲天天影视| 亚洲激情av| 国产专区综合网| 欧美网站大全在线观看| 免费久久精品视频| 欧美在线不卡视频| 亚洲一区二区三区在线| 91久久线看在观草草青青| 国产婷婷色一区二区三区在线| 欧美日韩国产精品一卡| 美女黄色成人网| 久久久国产精品亚洲一区 | 亚洲国产婷婷香蕉久久久久久| 欧美图区在线视频| 欧美电影免费观看大全| 久久免费高清| 欧美在线高清视频| 午夜在线播放视频欧美| 在线视频精品一区| 日韩午夜黄色| 亚洲另类在线一区| 亚洲人成网站999久久久综合| 精品999在线观看| 国产亚洲人成a一在线v站| 国产精品美女视频网站| 国产精品精品视频| 欧美特黄a级高清免费大片a级| 欧美精品观看| 欧美日韩国产在线一区| 欧美日韩精品一本二本三本| 欧美看片网站| 欧美日韩一区二区三区在线 | 欧美片网站免费| 欧美国产日本高清在线| 欧美激情视频在线播放| 欧美精品性视频| 欧美日韩国产三区| 欧美日韩亚洲一区二区| 欧美色图一区二区三区| 国产精品红桃| 欧美性猛交xxxx乱大交退制版 | 午夜精品久久久久久久白皮肤| 中国成人在线视频| 亚洲天堂免费观看| 欧美亚洲午夜视频在线观看| 久久久久久久成人| 美女视频黄免费的久久| 欧美国产日韩精品免费观看| 欧美日韩成人综合天天影院| 国产精品国产三级国产专播精品人| 欧美午夜不卡在线观看免费| 国产精品美女主播| 黄色亚洲网站| 99精品国产福利在线观看免费| 亚洲视频网站在线观看| 欧美在线观看视频在线| 免费的成人av| 国产精品国产精品国产专区不蜜| 国产亚洲精品bt天堂精选| 亚洲高清在线观看| 在线亚洲激情| 久久久噜噜噜久噜久久| 欧美国产先锋| 国产乱子伦一区二区三区国色天香| 激情五月婷婷综合| 在线一区二区三区做爰视频网站| 久久av红桃一区二区小说| 牛人盗摄一区二区三区视频| 国产精品视频免费观看www| 在线不卡中文字幕| 亚洲私人影院在线观看| 久久婷婷久久| 国产精品自拍在线| 亚洲精品护士| 久久久久久久久久久一区| 欧美日韩三级一区二区| 国内成人在线| 亚洲视频久久| 欧美国产三区| 激情六月婷婷综合| 亚洲欧美国产日韩中文字幕 | 午夜精品一区二区三区在线| 欧美**人妖| 国产综合欧美在线看| 一区二区三区回区在观看免费视频| 欧美一区二区在线视频| 欧美日韩一二三区| 亚洲国产99精品国自产| 欧美在线综合| 国产精品免费网站| 99在线|亚洲一区二区| 蜜臀91精品一区二区三区| 国产日韩欧美在线看| 中文av一区特黄| 欧美日韩1区2区| 亚洲第一网站免费视频| 久久精品一区二区| 国产精品久久久久aaaa九色| 99re6热在线精品视频播放速度| 两个人的视频www国产精品| 国产欧美一二三区| 亚洲欧美网站| 国产伦一区二区三区色一情| 亚洲免费一级电影| 国产精品v日韩精品| 一本一本久久a久久精品综合麻豆| 老鸭窝91久久精品色噜噜导演| 国内久久婷婷综合| 卡通动漫国产精品| 亚洲第一天堂无码专区| 另类av一区二区| 亚洲欧洲在线播放| 欧美精品1区2区| 亚洲精品综合久久中文字幕| 欧美成人精精品一区二区频| 一区二区三区在线视频播放 | 免费视频一区二区三区在线观看| 黄色一区二区三区四区| 久久视频免费观看| 在线欧美日韩| 欧美精品二区| 亚洲视频一区二区免费在线观看| 欧美性久久久| 午夜精品美女久久久久av福利| 亚洲综合视频网| 国产区亚洲区欧美区| 欧美亚洲综合网| 欲香欲色天天天综合和网| 老司机亚洲精品| 亚洲精品久久久久久久久久久久久| 欧美精品首页| 亚洲欧美色婷婷| 国产午夜精品一区二区三区视频 | 欧美日韩亚洲高清一区二区| 亚洲美女中出| 国产精品尤物福利片在线观看| 久久精品日韩| 亚洲精品一区在线| 国产精品日韩精品欧美精品| 久久激情视频久久| 亚洲国产精品va在线看黑人动漫 | 亚洲美女诱惑| 国产精品久久久久9999| 久久精品国产精品亚洲综合| 亚洲国产精品99久久久久久久久| 欧美另类人妖| 久久精品二区三区| 亚洲日本va午夜在线电影 | 国产欧美一区二区三区另类精品 | 欧美日韩专区| 午夜在线观看免费一区| 在线国产精品一区| 欧美日韩国产123| 国自产拍偷拍福利精品免费一| 欧美粗暴jizz性欧美20| 亚洲小视频在线观看| 国内在线观看一区二区三区| 欧美日韩在线观看视频| 午夜日韩电影| 99riav久久精品riav| 国产亚洲第一区| 欧美午夜欧美| 欧美成人激情视频| 香蕉久久久久久久av网站| 日韩视频中文| 国精品一区二区| 国产精品亚洲综合色区韩国| 欧美成人免费视频| 久久精品人人做人人综合 | 久久99伊人| 在线视频亚洲| 亚洲精品久久久久久久久| 黑人一区二区三区四区五区| 国产精品二区二区三区|