String.prototype.codePointAt()
BaselineWidely 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 코드 단위를 기반으로 한다는 점에 유의하시기 바랍니다.
시도해 보기
const icons = "☃★♲";console.log(icons.codePointAt(1));// Expected output: "9733"
구문
codePointAt(index)
매개변수
index
반환할 문자의 0 기반 인덱스.정수로 변환되는 규칙에 따라
undefined
는 0으로 변환됩니다.
반환 값
주어진index
에 있는 문자열의 코드 포인트 값을 표현하는 음이 아닌 정수.
index
가0
부터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() 사용하기
"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()
은 후행 서로게이트만 반환하므로 인덱스로 반복은 피하는 것이 좋습니다.
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)
을 사용하여 각 요소의 코드 포인트를 가져옵니다.
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 |