HTML: Markup language
CSS: Styling language
JavaScript: Scripting language
Web APIs: Programming interfaces
All web technology
Learn web development
Discover our tools
Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
View in English Always switch to English
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()
0
65535
charCodeAt() は常に UTF-16 コード単位の並びとして文字列をインデックスするので、孤立サロゲートを返すかもしれません。コードポイント値全体を取得したい場合は、 String.prototype.codePointAt() を使用してください。
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)
index
返す文字の 0 基点のインデックスです。整数に変換され、undefined は 0 に変換されます。
undefined
0 から 65535 までの整数を返します。これは index で指定された位置の UTF-16 コード単位の値を表します。index が 0 ~ str.length - 1 の範囲外であった場合、charCodeAt() は NaN を返します。
str.length - 1
NaN
文字列の中の文字は、左から右に向けてインデックス付けされています。最初の文字の添字は 0 であり、最後の文字の添字は str という名前の文字列であれば str.length - 1 です。
str
Unicode のコードポイントは 0 から 1114111 (0x10FFFF) までの範囲です。charCodeAt() は常に 65536 より小さい値を返しますが、これは上位のコードポイントは 16 ビットのサロゲート擬似文字のペアによって表されているからです。したがって、65535 より大きい値を持つ完全な文字を取得するには、charCodeAt(i) だけでなく charCodeAt(i + 1) も取得するか(2 つの文字を持つ文字列を操作する場合と同じです)、または codePointAt(i) を使用する必要があります。Unicode に関する情報はUTF-16 文字、Unicode コードポイント、書記素クラスターを参照してください。
1114111
0x10FFFF
65536
charCodeAt(i)
charCodeAt(i + 1)
codePointAt(i)
以下の例では、 Unicode 文字の A である 65 を返します。
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() のポリフィルをインストールしてください。
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
Enable JavaScript to view this browser compatibility table.
String.fromCharCode()
String.prototype.charAt()
String.fromCodePoint()