簡體   English   中英

JavaScript 如何將一組 integer 值的元素串起來?

[英]How is JavaScript string a set of elements of integer values?

來自MDN

JavaScript 的 String 類型用於表示文本數據。 它是一組 16 位無符號 integer 值的“元素”。 String 中的每個元素在 String 中占用一個 position。 第一個元素在索引 0 處,下一個在索引 1 處,依此類推。 String 的長度是其中元素的數量。 您可以使用字符串文字或字符串對象創建字符串。

當您說 JavaScript 字符串類型是一組 16 位無符號 integer 值的“元素”時,這是什么意思? 為什么 integer 值?

16 位無符號 integer 值是特定字符的表示,並且由於它是一元素,因此您可以像使用列表一樣使用[]表示法在字符串中獲取特定字符。 前任:

const string = 'john doe';
console.log(string[3]) // Will print 'n' as it is the 3rd index characters (starts at 0)

它只是意味着一個字符串是一個“類似數組”的 object ,每個字符都以與數組元素類似的方式可用。 這些字符中的每一個都存儲為UTF-16 值

 // The following is one string literal: let s = "ABCDEFG"; console.log(s); // But it's also an array-like object in that it has a length and can be indexed console.log("The length of the string is: ", s.length); console.log("The 3rd character is: ", s[2]); // And we can see that the characters are stored as separate UTF-16 values: console.log(s.charCodeAt(2));

據我了解:

  1. 無符號表示不是 + 或 -。
  2. 16 位表示可以表示 2^16 個元素/字符。
  3. 整數集表示使用多個整數(1 個或多個)表示一個字符串。

因此,這意味着要表示一個字符串 js 使用一組數字(每個數字是 2^16 個數字中的一個,因為沒有浮點數,也沒有正/負表示)。

注意:要了解更多有關 utf-16 的信息

參考: https://www.ibm.com/docs/en/i/7.2?topic=unicode-utf-16

在 Unicode 中,每個符號都有一個關聯的編號。 例如, "A"65"a"97等。這些數字稱為代碼點。 根據我們使用的編碼(UTF-32、UTF-16、UTF-8、ASCII 等),我們以不同的方式表示/編碼這些代碼點。 我們用來對這些代碼點編號進行編碼的東西被稱為“代碼單元”,或者如 MDN 所稱,“元素”。

由於我們使用的是 JavaScript,因此我們對字符的 UTF-16 編碼感興趣。 這意味着要表示單個代碼單元/“元素”,我們使用 16 位(2 個字節)。 對於“A”,“元素”表示為:

0000000001000001 // (16 bits, hence 0 padding)

我們需要表示很多字符(想想表情符號、中文、日文、韓文等,每個都有自己的代碼點),因此僅用 16 位來表示和編碼所有這些字符是不夠的。 這就是為什么有時某些代碼點使用兩個代碼單元/元素進行編碼的原因。 例如, 代碼點為128514 ,在 UTF16 中由兩個元素/代碼單元編碼:

1101100000111101 1101111000000010

因此,這兩個代碼單元/元素1101100000111101 (十進制 55357)和1101111000000010 (十進制 56834)對128514的代碼點/“字符”進行編碼,它表示 . 請注意兩個代碼單元都是正數(無符號)和整數(整數)。 UTF16 概述了將這些元素從元素形式轉換為代碼點形式的算法,反之亦然(參見此處的示例)。

這一切意味着什么? 這意味着像""這樣的字符串的長度為 2:

 console.log("".length); // 2

當您訪問字符串的索引時,您將訪問該字符串的代碼單元/“元素”:

 // "" in UTF16 is "1101100000111101 1101111000000010" // So ""[0] gives 1101100000111101 (in decimal 55357) // So ""[1] gives 1101111000000010 (in decimal 56834) console.log(""[0], "".charCodeAt(0)); // 1101100000111101 console.log(""[1], "".charCodeAt(1)); // 1101111000000010

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM