溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JavaScript 字符串是什么

發(fā)布時間:2021-09-13 10:31:28 來源:億速云 閱讀:110 作者:柒染 欄目:web開發(fā)

本篇文章給大家分享的是有關(guān)JavaScript 字符串是什么,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

說起字符串,我們再熟悉不過了。接觸編程的第一個經(jīng)典任務(wù)就是輸出字符串:Hello, world。但是你知道 JavaScript  字符串在計算機(jī)里是怎么表示的嗎?

JavaScript 字符串是什么

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

const message = 'Hello!';

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

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

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

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

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

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

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

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

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

const letter = '\u0048'; letter === 'H' // => true

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

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

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

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

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

const message = 'Hello!'; const smile = '?';  [...message].length; // => 6 [...smile].length;   // => 1

以上就是JavaScript 字符串是什么,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI