정의 및 사용 방법
charCodeAt() 함수는 문자열에서 지정한 인덱스에 위치한 문자의 유니코드 숫자 값을 반환합니다.
이 함수가 반환하는 유니코드 숫자 값은 해당 문자를 표현하는 **UTF-16 코드 유닛**을 기준으로 하며, 10진수로 나타냅니다.
- UTF-16 코드 유닛(Code Unit)
- 자바스크립트는 문자열을 처리할 때 'UTF-16 코드 유닛'을 기준으로 합니다.
UTF-16에서 코드 유닛이란, 문자열을 내부적으로 저장하고 처리하기 위해 사용하는 16비트(2바이트) 크기의 단위를 의미합니다. 영어 문자, 숫자, 그리고 일반적인 한글은 하나의 'UTF-16 코드 유닛'으로 표현되므로, 문자열의 길이와 인덱스에서도 각각 1로 계산됩니다.
반면, 'UTF-16 코드 유닛' 하나로 표현할 수 없는 이모지(예: 😃, 🎉, ❤️)는 두 개의 코드 유닛을 한 쌍으로 조합해 하나의 문자로 처리됩니다.
따라서, charCodeAt() 함수는 하나의 **UTF-16 코드 유닛**으로 표현할 수 없는 이모지 문자에는 적합하지 않습니다. 이모지가 포함된 문자열에서는 전체 코드 포인트를 기준으로 값을 반환하는 codePointAt() 함수를 사용해야 합니다.
기본 예제
/* 문자열.charCodeAt(index) */
const str = "ABCDE";
const index = 1; // 인덱스 1에 위치한 문자는 "B" (문자열 인덱스는 0부터 시작)
const resultCharCode = str.charCodeAt(index);
console.log(resultCharCode); // 출력: 66
구문
str.charCodeAt(index)
str은 charCodeAt() 함수를 적용할 문자열입니다.
매개변수
index |
0부터 시작하는 인덱스를 지정합니다.
|
|---|
반환 값
index에 위치한 문자를 표현하는 UTF-16 코드 유닛을 기준으로 한 숫자 값을 반환합니다.
이 값은 10진수로 표현된 정수입니다.
단, index가 문자열의 유효한 범위를 벗어날 경우 NaN을 반환합니다.
사용법 참고 사항
지정한 인덱스에 위치한 문자의 유니코드 숫자 값을 반환하는 charCodeAt() 함수는 0부터 65535(2¹⁶ - 1 ) 사이의 정수를 반환합니다.
이 함수가 반환하는 숫자 값은 단순한 결과값이 아니라, 문자를 비교하거나 조건으로 판단하는 등 문자를 숫자로 다뤄야 하는 상황에서 의미를 갖습니다.
문자의 유니코드 숫자 값이 어떤 기준으로 정해지며, 어떤 상황에서 활용되는지에 대해 살펴봅니다.
유니코드 숫자 값은 범위가 있다.
유니코드 숫자 값에서는 영어 문자, 숫자, 특수 문자, 그리고 각 언어의 문자마다 서로 다른 **숫자 값의 범위**가 정해져 있습니다.
예를 들면 다음의 표와 같습니다.
| 구분 | 문자 범위 | 유니코드 숫자 값 (10진수) |
|---|---|---|
| 영어 대문자 | A ~ Z |
65 ~ 90 |
| 영어 소문자 | a ~ z |
97 ~ 122 |
| 숫자 | 0 ~ 9 |
48 ~ 57 |
이러한 숫자 값의 범위는 한국어를 포함하여 언어별로도 규격화되어 있다는 것입니다.
반환되는 유니코드 숫자 값을 알면, 해당 문자가 영어 대문자인지 소문자인지, 숫자인지 또는 한국어 문자인지를 이렇게 정해진 범위를 기준으로 판단할 수 있습니다.
유니코드 숫자 값은 문자 정렬의 기준이 된다.
문자는 자바스크립트에서 내부적으로 숫자 값(유니코드 숫자 값)을 인식할 수 있기 때문에, 문자를 비교하거나 정렬할 때는 결국 이 **숫자의 크기**를 기준으로 판단하게 됩니다.
예를 들면 다음의 표와 같습니다.
| 구분 | 문자 | 유니코드 숫자 값 (10진수) |
|---|---|---|
| 영어 대문자 | A |
65 |
| 영어 대문자 | B |
66 |
| 영어 대문자 | C |
67 |
| 영어 소문자 | a |
97 |
| 영어 소문자 | b |
98 |
| 영어 소문자 | c |
99 |
| 숫자 | 0 |
48 |
| 숫자 | 1 |
49 |
| 숫자 | 2 |
50 |
이러한 숫자 값의 정렬은 한국어를 포함하여 언어별로도 규격화되어 있다는 것입니다.
반환되는 유니코드 숫자 값을 알면, 문자열을 사전식으로 정렬하거나 특정 문자끼리의 정렬 순서를 비교할 수 있습니다.
유니코드 숫자 값을 알려면
위키백과의 List of Unicode characters를 참고하세요.
활용 예제
다음은 charCodeAt() 함수를 사용하여 반환되는 유니코드 숫자 값을 실제 어떻게 활용하는지에 대한 예제입니다.
문자 종류 판별 예제
function checkCharacterType(char) {
const code = char.charCodeAt(0);
switch (true) {
case (code >= 65 && code <= 90):
return "영어 대문자";
break;
case (code >= 97 && code <= 122):
return "영어 소문자";
break;
case (code >= 48 && code <= 57):
return "숫자";
break;
case (code >= 44032 && code <= 55203):
return "한글(가~힣)";
break;
default:
return "기타 문자 또는 특수 기호";
}
}
console.log(checkCharacterType("A")); // 출력: 영어 대문자
console.log(checkCharacterType("7")); // 출력: 숫자
console.log(checkCharacterType("코")); // 출력: 한글(가~힣)
문자를 사전식 정렬 예제
/**
* 두 문자의 유니코드 숫자 값을 비교하여 정렬 순서를 반환합니다.
* 결과값이 음수이면 첫 번째 문자가 앞서고, 양수이면 뒤에 옵니다.
*/
function compareCharacters(char1, char2) {
const code1 = char1.charCodeAt(0);
const code2 = char2.charCodeAt(0);
// 두 코드 값의 차이를 반환
return code1 - code2;
}
const result1 = compareCharacters("A", "B");
console.log(result1); // -1 (65 - 66): 'A'가 'B'보다 앞섬
const result2 = compareCharacters("b", "a");
console.log(result2); // 1 (98 - 97): 'b'가 'a'보다 뒤에 옴
const result3 = compareCharacters("A", "a");
console.log(result3); // -32 (65 - 97): 대문자 'A'가 소문자 'a'보다 훨씬 앞섬
명세서
| 명세서 사양 | |
|---|---|
charCodeAt()
|
ECMAScript® 2026 Language Specification #sec-string.prototype.charcodeat |
호환성
| 메서드 |
데스크탑 Chrome
|
데스크탑데스크탑 Edge
|
데스크탑 Firefox
|
Safari
|
Node.js
|
|---|---|---|---|---|---|
charCodeAt()
|
1 | 12 | 1 | 1 | 0.10 |