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 September 2015.

String 값의 codePointAt() 메서드는 주어진 인덱스에서 시작하는 문자의 유니코드 코드 포인트 값인 음수가 아닌 정수를 반환합니다. 인덱스는 여전히 유니코드 코드 포인트가 아닌 UTF-16 코드 단위를 기반으로 한다는 점에 유의하시기 바랍니다.

시도해보기

구문

js
codePointAt(index)

매개변수

index

반환할 문자의 0 기반 인덱스. 정수로 변환되는 규칙에 따라 undefined는 0으로 변환됩니다.

반환 값

주어진 index에 있는 문자열의 코드 포인트 값을 표현하는 음이 아닌 정수.

  • index0부터 str.length - 1의 범위에서 벗어난다면, codePointAt()undefined을 반환합니다.
  • index에 있는 요소가 서로게이트로 선행 UTF-16이라면 서로게이트 쌍의 코드 포인트를 반환합니다.
  • index에 있는 요소가 서로게이트로 후행 UTF-16이라면 서로게이트 후행 만을 반환합니다.

설명

문자열의 문자는 왼쪽에서 오른쪽으로 인덱싱됩니다. 첫 번째 문자의 인덱스는 0이고, 문자열 str의 마지막 문자의 인덱스는 str.length - 1입니다.

유니코드 코드 포인트의 범위는 0에서 1114111(0x10FFFF)까지입니다. UTF-16에서 각 문자열 인덱스는 0 - 65535 값을 갖는 코드 단위입니다. 더 큰 코드 포인트 값은 16비트 서로게이트 의사 문자의 한 쌍으로 표현됩니다. 따라서 codePointAt()은 두 문자열 인덱스에 걸쳐 있을 수 있는 코드 포인트를 반환합니다. 유니코드에 대한 자세한 내용은 UTF-16 문자, 유니코드 코드 포인트 및 문자소 클러스터를 참조하세요.

예제

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'

대신 코드 포인트별로 반복하는 문자열의 @@iterator를 호출하는 for...of 문이나 문자열 전개를 사용합니다. 그런 다음 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 Language Specification
# sec-string.prototype.codepointat

브라우저 호환성

BCD tables only load in the browser

같이 보기