String.prototype.codePointAt()

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

같이 보기