Movatterモバイル変換


[0]ホーム

URL:


  1. 面向开发者的 Web 技术
  2. JavaScript
  3. JavaScript 参考
  4. JavaScript 标准内置对象
  5. String
  6. String.prototype.codePointAt()

此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in EnglishAlways switch to English

String.prototype.codePointAt()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨2015年9月⁩.

StringcodePointAt() 方法返回一个非负整数,该整数是从给定索引开始的字符的 Unicode 码位值。请注意,索引仍然基于 UTF-16 码元,而不是 Unicode 码位。

尝试一下

const icons = "☃★♲";console.log(icons.codePointAt(1));// Expected output: "9733"

语法

js
codePointAt(index)

参数

index

需要返回的字符的(从零开始的)索引。会被转换为整数——undefined 会转换为 0。

返回值

一个非负整数,表示给定index 处字符的码位值。

  • 如果index 超出了0str.length - 1 的范围,codePointAt() 返回undefined
  • 如果index 处的元素是一个 UTF-16 前导代理(leading surrogate),则返回代理的码位。
  • 如果index 处的元素是一个 UTF-16 后尾代理(trailing surrogate),则返回后尾代理的码元。

描述

字符串中的字符从左到右进行索引。第一个字符的索引为0,而字符串str 中最后一个字符的索引为str.length - 1

Unicode 码位范围从011141110x10FFFF)。在 UTF-16 中,每个字符串索引是一个取值范围为065535 的码元。较高的码位由一个由一对 16 位代理伪字符表示。因此,codePointAt() 返回的码位可能跨越两个字符串索引。有关 Unicode 的信息,请参阅UTF-16 字符、Unicode 码位和字素簇

示例

使用 codePointAt()

js
"ABC".codePointAt(0); // 65"ABC".codePointAt(0).toString(16); // 41"😍".codePointAt(0); // 128525"\ud83d\ude0d".codePointAt(0); // 128525"\ud83d\ude0d".codePointAt(0).toString(16); // 1f60d"😍".codePointAt(1); // 56845"\ud83d\ude0d".codePointAt(1); // 56845"\ud83d\ude0d".codePointAt(1).toString(16); // de0d"ABC".codePointAt(42); // undefined

在循环中使用 codePointAt()

因为使用字符串索引进行循环会导致同一码位被访问两次(一次是前导代理,一次是后尾代理),而第二次调用codePointAt()返回后尾代理项,所以最好避免使用索引进行循环。

js
const str = "\ud83d\udc0e\ud83d\udc71\u2764";for (let i = 0; i < str.length; i++) {  console.log(str.codePointAt(i).toString(16));}// '1f40e'、'dc0e'、'1f471'、'dc71'、'2764'

相反,可以使用for...of 语句或字符串展开语法,这两种方法都会调用字符串的[Symbol.iterator](),从而按照码位进行迭代。然后,可以使用codePointAt(0) 获取每个元素的码位值。

js
for (const codePoint of str) {  console.log(codePoint.codePointAt(0).toString(16));}// '1f40e'、'1f471'、'2764'[...str].map((cp) => cp.codePointAt(0).toString(16));// ['1f40e', '1f471', '2764']

规范

Specification
ECMAScript® 2026 Language Specification
# sec-string.prototype.codepointat

浏览器兼容性

参见

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp