String.prototype.charCodeAt()
BaselineWidely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
ThecharCodeAt()
method ofString
values returns an integer between0
and65535
representing the UTF-16 code unit at the given index.
charCodeAt()
always indexes the string as a sequence ofUTF-16 code units, so it may return lone surrogates. To get the full Unicode code point at the given index, useString.prototype.codePointAt()
.
Try it
const sentence = "The quick brown fox jumps over the lazy dog.";const index = 4;console.log( `Character code ${sentence.charCodeAt(index)} is equal to ${sentence.charAt( index, )}`,);// Expected output: "Character code 113 is equal to q"
Syntax
charCodeAt(index)
Parameters
index
Zero-based index of the character to be returned.Converted to an integer —
undefined
is converted to 0.
Return value
An integer between0
and65535
representing the UTF-16 code unit value of the character at the specifiedindex
. Ifindex
is out of range of0
–str.length - 1
,charCodeAt()
returnsNaN
.
Description
Characters in a string are indexed from left to right. The index of the first character is0
, and the index of the last character in a string calledstr
isstr.length - 1
.
Unicode code points range from0
to1114111
(0x10FFFF
).charCodeAt()
always returns a value that is less than65536
, because the higher code points are represented bya pair of 16-bit surrogate pseudo-characters. Therefore, in order to get a full character with value greater than65535
, it is necessary to retrieve not onlycharCodeAt(i)
, but alsocharCodeAt(i + 1)
(as if manipulating a string with two characters), or to usecodePointAt(i)
instead. For information on Unicode, seeUTF-16 characters, Unicode code points, and grapheme clusters.
Examples
Using charCodeAt()
The following example returns65
, the Unicode value for A.
"ABC".charCodeAt(0); // returns 65
charCodeAt()
may return lone surrogates, which are not valid Unicode characters.
const str = "𠮷𠮾";console.log(str.charCodeAt(0)); // 55362, or d842, which is not a valid Unicode characterconsole.log(str.charCodeAt(1)); // 57271, or dfb7, which is not a valid Unicode character
To get the full Unicode code point at the given index, useString.prototype.codePointAt()
.
const str = "𠮷𠮾";console.log(str.codePointAt(0)); // 134071
Note:Avoid re-implementingcodePointAt()
usingcharCodeAt()
. The translation from UTF-16 surrogates to Unicode code points is complex, andcodePointAt()
may be more performant as it directly uses the internal representation of the string. Install a polyfill forcodePointAt()
if necessary.
Below is a possible algorithm to convert a pair of UTF-16 code units into a Unicode code point, adapted from theUnicode FAQ:
// constantsconst LEAD_OFFSET = 0xd800 - (0x10000 >> 10);const SURROGATE_OFFSET = 0x10000 - (0xd800 << 10) - 0xdc00;function utf16ToUnicode(lead, trail) { return (lead << 10) + trail + SURROGATE_OFFSET;}function unicodeToUTF16(codePoint) { const lead = LEAD_OFFSET + (codePoint >> 10); const trail = 0xdc00 + (codePoint & 0x3ff); return [lead, trail];}const str = "𠮷";console.log(utf16ToUnicode(str.charCodeAt(0), str.charCodeAt(1))); // 134071console.log(str.codePointAt(0)); // 134071
Specifications
Specification |
---|
ECMAScript® 2026 Language Specification # sec-string.prototype.charcodeat |