日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
關(guān)于JavaScript字符串的一個(gè)小知識(shí)

 說(shuō)起字符串,我們?cè)偈煜げ贿^(guò)了。接觸編程的第一個(gè)經(jīng)典任務(wù)就是輸出字符串:Hello, world。但是你知道 JavaScript 字符串在計(jì)算機(jī)里是怎么表示的嗎?

創(chuàng)新互聯(lián)專(zhuān)注于馬鞍山企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計(jì),成都做商城網(wǎng)站。馬鞍山網(wǎng)站建設(shè)公司,為馬鞍山等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站制作,專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)

最簡(jiǎn)單直觀但不太準(zhǔn)確的的理解就是,字符串就是由英文字母、數(shù)字和標(biāo)點(diǎn)符號(hào)等這些字符組成的序列。比如下面這個(gè)字符串就是由5個(gè)字母和一個(gè)感嘆號(hào)組成的:

 
 
 
  1. const message = 'Hello!'; 

同時(shí)也可以看出該字符串的字符數(shù)是6:

 
 
 
  1. const message = 'Hello!'; 
  2. message.length; // => 6 

如果字符串是由這些可見(jiàn)字符(也就是 127 個(gè) ASCII 字符) 組成的,這樣理解沒(méi)有問(wèn)題。但是,一旦碰到不常見(jiàn)的符號(hào),比如一些表情字符, , ,可能會(huì)得到意外的結(jié)果:

 
 
 
  1. const smile = ''; 
  2. smile.length; // => 2 

是不是很奇怪?明明只有一個(gè)字符,長(zhǎng)度怎么會(huì)是 2 呢?這是因?yàn)?,JavaScript 字符串實(shí)際上是由編碼單元構(gòu)成的,而不是可見(jiàn)字符序列。

ECMA 262 規(guī)范里是這么描述 JavaScript 字符串的:

String 類(lèi)型是由零或多個(gè) 16 位無(wú)符號(hào)整數(shù)值組成的有序序列的集合。字符串類(lèi)型通常用于表示運(yùn)行中的 ECMAScript 程序中的文本數(shù)據(jù),在這種情況下,字符串中的每個(gè)元素都被視為 UTF-16 編碼單元值。

簡(jiǎn)單說(shuō),JavaScript 字符串就是 UTF-16 編碼單元序列,一串?dāng)?shù)字而已。

一個(gè)編碼單元就是位于 0x0000 和 0xFFFF 之間的一個(gè)數(shù)字,編碼單元與字符之間有個(gè)對(duì)應(yīng)關(guān)系。例如,編碼單元 0x0048 對(duì)應(yīng)了實(shí)際的字符 H:

 
 
 
  1. const letter = '\u0048'; 
  2. letter === 'H' // => true 

如果把一整個(gè)字符串'Hello!'用編碼單元表示就是這樣:

 
 
 
  1. const message = '\u0048\u0065\u006C\u006C\u006F\u0021'; 
  2. message === 'Hello!'; // => true 
  3. message.length;       // => 6 

可以看到,這個(gè)字符串有6個(gè)編碼單元,每個(gè)編碼單元對(duì)應(yīng)一個(gè)字符?;径辔姆N平面 BMP(Basic Multilingual Plane)中的任意一個(gè)字符,都可以用一個(gè) UTF-16 編碼單元表示。但是,在這個(gè)范圍以外的字符,就需要 2 個(gè) UTF-16 編碼單元來(lái)表示了。比如前面提到的笑臉?lè)?hào),編碼是\uD83D\uDE00:

 
 
 
  1. const smile = '\uD83D\uDE00'; 
  2. smile === ''; // => true 
  3. smile.length;  // => 2 

這兩個(gè)編碼單元是成對(duì)存在的,用于表示超出 0xFFFF 的字符。不能拆開(kāi),否則就變成無(wú)法識(shí)別的亂碼了。另外,這里的.length是2,說(shuō)明這個(gè)屬性其實(shí)是字符串編碼單元的個(gè)數(shù),而不是字符數(shù)。在需要判斷字符數(shù)量的時(shí)候就要注意了,根據(jù).length得到的結(jié)果是不準(zhǔn)確的。那要怎么解決呢?可以用這種辦法:

 
 
 
  1. const message = 'Hello!'; 
  2. const smile = ''; 
  3.  
  4. [...message].length; // => 6 
  5. [...smile].length;   // => 1 

如果覺(jué)得這個(gè)關(guān)于 JavaScript 字符串的小知識(shí)對(duì)你有用,歡迎分享給你的小伙伴們!


分享文章:關(guān)于JavaScript字符串的一個(gè)小知識(shí)
標(biāo)題來(lái)源:http://www.dlmjj.cn/article/dpdephe.html