# 字符和编码

# 1.1 String.prototype.charAt()

charAt() 方法从一个字符串中返回指定的字符。

const str = 'hello';
for (let i = 0, len = str.length; i < len; i++) {
  console.log(str.charAt(i), str[i]);
}
/* 
h h
e e
l l
l l
o o
*/

# 1.2 String.prototype.charCodeAt()

charCodeAt() 方法返回 065535 之间的整数,表示给定索引处的 UTF-16 代码单元,码元

const str = '123abcABC你好';
for (let i = 0, len = str.length; i < len; i++) {
  console.log(`${str[i]} = ${str.charCodeAt(i)}`);
}
/* 
1 = 49
2 = 50
3 = 51
a = 97
b = 98
c = 99
A = 65
B = 66
C = 67
你 = 20320
好 = 22909
*/

# 1.3 String.prototype.codePointAt()

codePointAt() 方法返回 一个 Unicode 编码点值的非负整数。

# 1.4 charCodeAt和codePointAt的区别

相同点: charCodeAt与codePointAt都是字符串实例上的方法,用途都是用来返回指定索引位字符的Unicode编码。

不同点: charCodeAt与codePointAt匹配索引位的规则不一样。charCodeAt是根据码元来匹配,codePointAt是根据码点来进行匹配的。

JavaScript 内部,字符以 UTF-16(字符用两个字节或四个字节表示) 的格式储存,码点范围介于U+0000到U+FFFF,每个字符固定为2个字节,一个码元。对于那些需要4个字节储存的字符(Unicode 码点大于0xFFFF的字符),两个码元,JavaScript 会认为它们是两个字符。

TIP

码点可以是一个码元,也可以是两个码元。

字符串的length属性返回的是码元

字符串的length属性返回的是码元。所以在对一些字符串如果要处理长度的时候要注意这一点。

举个例子:\ud842\udfb7 表示汉字 '𠮷', 这是2个码元,一个码点。

'𠮷'.codePointAt(0); // 134071
'𠮷'.charCodeAt(0); // 55362
'𠮷'.charCodeAt(1); // 57271

'a'.charCodeAt(0); // 97
'a'.codePointAt(0); // 97

# 1.4.1 获取一个字符串的字节长度

利用Blob来实现,Blob对象代表了一段二进制数据,size属性表示二进制数据的大小,单位为字节。

function getStrByteLength(str = '') {
  if (!str) {
    return 0;
  }
  let blob = new Blob([str], { type: 'text/plain' });
  const len = blob.size;
  blob = null;
  return len;
}

# 1.5 String.fromCharCode()

静态 String.fromCharCode() 方法返回由指定的 UTF-16 代码单元序列创建的字符串。

String.fromCharCode(97, 98, 99)// abc

# 1.6 String.fromCodePoint()

String.fromCodePoint() 静态方法返回使用指定的代码点序列创建的字符串

String.fromCodePoint(97, 9733, 134071); // a★𠮷
上次更新: 1/22/2025, 9:39:13 AM