# 字符和编码
# 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()
方法返回 0
到 65535
之间的整数,表示给定索引处的 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★𠮷
← Date格式化和解析 replace用法 →