String.prototype.charCodeAt()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

charCodeAt() メソッドは、指定された位置にある UTF-16 コード単位を表す 0 から 65535 までの整数を返します。

charCodeAt() は常に UTF-16 コード単位の並びとして文字列をインデックスするので、孤立サロゲートを返すかもしれません。コードポイント値全体を取得したい場合は、 codePointAt() を使用してください。

試してみましょう

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"

構文

js
charCodeAt(index)

引数

index

返す文字の 0 基点のインデックスです。整数に変換されundefined は 0 に変換されます。

返値

0 から 65535 までの整数を返します。これは index で指定された位置の UTF-16 コード単位の値を表します。index0str.length - 1 の範囲外であった場合、charCodeAt()NaN を返します。

解説

文字列の中の文字は、左から右に向けてインデックス付けされています。最初の文字の添字は 0 であり、最後の文字の添字は str という名前の文字列であれば str.length - 1 です。

Unicode のコードポイントは 0 から 1114111 (0x10FFFF) までの範囲です。charCodeAt() は常に 65536 より小さい値を返しますが、これは上位のコードポイントは 16 ビットのサロゲート擬似文字のペアによって表されているからです。したがって、65535 より大きい値を持つ完全な文字を取得するには、charCodeAt(i) だけでなく charCodeAt(i + 1) も取得するか(2 つの文字を持つ文字列を操作する場合と同じです)、または codePointAt(i) を使用する必要があります。Unicode に関する情報はUTF-16 文字、Unicode コードポイント、書記素クラスターを参照してください。

charCodeAt() の使用

以下の例では、 Unicode 文字の A である 65 を返します。

js
"ABC".charCodeAt(0); // returns 65

charCodeAt() は妥当な Unicode 文字ではない、孤立サロゲートを返す可能性があります。

js
const str = "𠮷𠮾";
console.log(str.charAt(0)); // 55362、または d842、これは妥当な Unicode 文字ではない
console.log(str.charAt(1)); // 57271、または dfb7、これは妥当な Unicode 文字ではない

指定された位置の完全な Unicode コードポイントを取得するには、String.prototype.codePointAt() を使用してください。

js
const str = "𠮷𠮾";
console.log(str.codePointAt(0)); // 134071

メモ: charCodeAt() を使用して codePointAt() を再実装することは避けてください。孤立サロゲートの検出とそのペアリングは複雑で、文字列の内部表現を直接使用する組み込み API の方がパフォーマンスが高いかもしれません。必要であれば、codePointAt() のポリフィルをインストールしてください。

以下は Unicode FAQ から引用した、UTF-16 コードユニットのペアを Unicode コードポイントに変換する可能なアルゴリズムです。

js
// constants
const 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))); // 134071
console.log(str.codePointAt(0)); // 134071

仕様書

Specification
ECMAScript® 2025 Language Specification
# sec-string.prototype.charcodeat

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
charCodeAt

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

関連情報