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 코드 단위를 기반으로 한다는 점에 유의하시기 바랍니다.
시도해보기
구문
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 Language Specification # sec-string.prototype.codepointat |
브라우저 호환성
BCD tables only load in the browser