成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

關于 JavaScript 字符串的一個小知識

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

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

[[337557]]

最簡單直觀但不太準確的的理解就是,字符串就是由英文字母、數字和標點符號等這些字符組成的序列。比如下面這個字符串就是由5個字母和一個感嘆號組成的:

 

  1. const message = 'Hello!'

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

 

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

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

 

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

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

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

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

簡單說,JavaScript 字符串就是 UTF-16 編碼單元序列,一串數字而已。

一個編碼單元就是位于 0x0000 和 0xFFFF 之間的一個數字,編碼單元與字符之間有個對應關系。例如,編碼單元 0x0048 對應了實際的字符 H:

 

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

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

 

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

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

 

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

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

 

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

如果覺得這個關于 JavaScript 字符串的小知識對你有用,歡迎分享給你的小伙伴們!

責任編輯:華軒 來源: 1024譯站
相關推薦

2011-07-18 13:34:44

SQL Server數拼接字符串

2021-08-13 07:00:43

Java字符串對象問題

2022-10-13 16:14:26

JavaScript字符串開發

2020-05-12 08:53:15

JavaScript字符串處理庫

2020-12-31 07:56:02

JavaScript 字符串技巧

2023-04-17 16:19:32

編程語言JavaScript開發

2023-02-09 16:15:27

JavaScript編程語言字符串

2023-04-25 15:46:51

Python字符串

2011-07-22 15:38:54

SQL Server數存儲過程切割字符串

2011-04-20 11:34:07

SQL字符串分割

2023-11-27 16:01:59

JavaScrip技巧

2022-12-08 15:55:52

JavaScript字符串

2022-08-14 09:01:27

代碼字符串

2020-09-18 14:23:50

字符

2011-07-11 16:00:22

字符串拼接

2020-09-03 10:13:49

JavaScript字符串pad

2022-11-24 08:01:57

bash腳本字符串

2024-01-04 09:17:03

前端開發CSV 格式JSON 字符串

2011-06-03 13:03:03

JAVA

2010-01-05 10:40:07

.NET Framew
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 69亚洲精品 | 成人二区 | 蜜桃视频在线观看www社区 | 草草草影院 | 成人在线电影网站 | 国产精品视频免费观看 | av手机免费在线观看 | 91观看 | 国产亚洲一区二区在线观看 | 精品一区国产 | 精品亚洲二区 | 亚洲综合小视频 | 日韩视频精品在线 | 日韩精彩视频 | 在线观看av不卡 | 精品欧美激情精品一区 | 欧美极品在线播放 | 99热最新 | 色毛片 | 日本中文字幕一区 | 日韩精品一区二区三区视频播放 | 国产在线观看一区 | 一级毛片免费 | 日韩在线观看网站 | 99精品免费视频 | 国产精品久久久久久久岛一牛影视 | 狠狠干网| 97视频在线免费 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 欧美亚洲在线视频 | 国产一区二区三区 | 日韩视频专区 | 久久五月婷 | 成人在线网 | 五月天婷婷综合 | 国产精品久久久久久久久久久免费看 | 欧美aⅴ | 麻豆久久久久久久 | 久热国产在线 | 久久国产免费看 | 成人欧美一区二区三区色青冈 |