返回

您还在用charCodeAt那你就out了

前端

当然,您要了解有关 JavaScript Unicode 的更多信息,我已经为您准备了一篇关于 JavaScript Unicode 知识的文章。
内容包括一些容易被忽略的冷知识,相信您一定感兴趣。

您还在用charCodeAt吗?那您就out了!charCodeAt是JavaScript中用来获取字符串中指定位置字符的Unicode编码的方法,但它有很多局限性。

  • charCodeAt只能获取基本平面字符的Unicode编码 。基本平面是Unicode编码中的第一个平面,包含了大部分常用的字符,但它只占Unicode编码空间的很少一部分。
  • charCodeAt不能正确处理代理对 。代理对是Unicode编码中用来表示某些特殊字符的方法,如表情符号。charCodeAt会将代理对中的两个字符分别编码为两个单独的数字,但这两个数字不能正确地表示代理对。
  • charCodeAt不能正确处理组合字符 。组合字符是Unicode编码中用来表示某些特殊字符的方法,如带变音符号的字符。charCodeAt会将组合字符中的每个字符分别编码为一个单独的数字,但这些数字不能正确地表示组合字符。

为了解决charCodeAt的这些局限性,JavaScript提供了codePointAt、fromCodePoint、String.prototype.codePointAt()和String.prototype.fromCodePoint()等方法。

  • codePointAt 方法可以获取字符串中指定位置字符的Unicode码点。Unicode码点是Unicode编码中每个字符的唯一标识符。
  • fromCodePoint 方法可以根据Unicode码点创建字符串。
  • String.prototype.codePointAt() 方法可以获取字符串中指定位置字符的Unicode码点。
  • String.prototype.fromCodePoint() 方法可以根据Unicode码点创建字符串。

这些方法可以正确处理基本平面字符、代理对和组合字符。因此,如果您需要处理Unicode字符,建议您使用这些方法,而不是charCodeAt。

下面是一些使用charCodeAt、codePointAt、fromCodePoint和String.prototype.codePointAt()、String.prototype.fromCodePoint()方法的示例:

// 获取字符串中第一个字符的Unicode编码
const str = "Hello";
const code = str.charCodeAt(0);
console.log(code); // 72

// 获取字符串中第一个字符的Unicode码点
const codePoint = str.codePointAt(0);
console.log(codePoint); // 72

// 根据Unicode码点创建字符串
const newStr = String.fromCodePoint(codePoint);
console.log(newStr); // "H"

// 获取字符串中第一个字符的Unicode码点
const codePoint2 = "😂".codePointAt(0);
console.log(codePoint2); // 128512

// 根据Unicode码点创建字符串
const newStr2 = String.fromCodePoint(codePoint2);
console.log(newStr2); // "😂"

希望这篇文章对您有所帮助。如果您有其他问题,请随时与我联系。