CARVIEW |
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
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 2015年7月.
charCodeAt()
メソッドは、指定された位置にある UTF-16 コード単位を表す 0
から 65535
までの整数を返します。
charCodeAt()
は常に UTF-16 コード単位の並びとして文字列をインデックスするので、孤立サロゲートを返すかもしれません。コードポイント値全体を取得したい場合は、 String.prototype.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,
)}`,
);
// 予想される結果: "Character code 113 is equal to q"
構文
charCodeAt(index)
引数
返値
0
から 65535
までの整数を返します。これは index
で指定された位置の UTF-16 コード単位の値を表します。index
が 0
~ str.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
を返します。
"ABC".charCodeAt(0); // returns 65
charCodeAt()
は妥当な Unicode 文字ではない、孤立サロゲートを返す可能性があります。
const str = "𠮷𠮾";
console.log(str.charCodeAt(0)); // 55362、または d842、これは妥当な Unicode 文字ではない
console.log(str.charCodeAt(1)); // 57271、または dfb7、これは妥当な Unicode 文字ではない
指定された位置の完全な Unicode コードポイントを取得するには、String.prototype.codePointAt()
を使用してください。
const str = "𠮷𠮾";
console.log(str.codePointAt(0)); // 134071
メモ:
charCodeAt()
を使用して codePointAt()
を再実装することは避けてください。孤立サロゲートの検出とそのペアリングは複雑で、文字列の内部表現を直接使用する組み込み API の方がパフォーマンスが高いかもしれません。必要であれば、codePointAt()
のポリフィルをインストールしてください。
以下は Unicode FAQ から引用した、UTF-16 コードユニットのペアを Unicode コードポイントに変換する可能なアルゴリズムです。
// 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® 2026 Language Specification> # sec-string.prototype.charcodeat> |
ブラウザーの互換性
Loading…