このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
String.prototype.charAt()
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月.
charAt() はString 値のメソッドで、指定されたインデックスにある単一の UTF-16 コード単位からなる新しい文字列を返します。
charAt() は常に文字列をUTF-16 コード単位の並びとして索引付けます。そのため、孤立したサロゲートを返す可能性があります。指定されたインデックスの完全な Unicode コードポイントを取得するには、String.prototype.codePointAt() およびString.fromCodePoint() を使用してください。
In this article
試してみましょう
const sentence = "The quick brown fox jumps over the lazy dog.";const index = 4;console.log(`The character at index ${index} is ${sentence.charAt(index)}`);// 予想される結果: "The character at index 4 is q"構文
charAt(index)引数
返値
指定されたindex の位置にある文字(厳密に 1 つの UTF-16 コードポイント)を表す文字列です。index の位置が文字列の範囲を外れていた場合は、charAt() は空文字列を返します。
解説
文字列の中の文字は、左から右に向けてインデックス付けされています。最初の文字の添字は0 であり、最後の文字の添字はstr という名前の文字列であればstr.length - 1 です。
Unicode のコードポイントは0 から1114111 (0x10FFFF) までの範囲です。charAt() は常に65536 より小さい値を返しますが、これは上位のコードポイントは 16 ビットのサロゲート擬似文字のペアによって表されているからです。したがって、65535 より大きい値を持つ完全な文字を取得するには、charAt(i) だけでなくcharAt(i + 1) も取得するか(2 つの文字を持つ文字列を操作する場合と同じです)、またはcodePointAt(i) とString.fromCodePoint() を使用する必要があります。Unicode に関する情報はUTF-16 文字、Unicode コードポイント、書記素クラスターを参照してください。
charAt() はブラケット記法を使用して指定された位置の文字にアクセスするのにとても似ています。主な違いは次の通りです。
charAt()はindexを整数に変換しようとしますが、ブラケット記法はそうせずに、直接indexをプロパティ名として使用します。charAt()はindexが範囲外であったときに空文字列を返しますが、ブラケット記法はundefinedを返します。
例
>文字列の中の様々な位置の文字の表示
次の例は、`"Brave new world"`` という文字列の中の様々な位置の文字を表示します。
const anyString = "Brave new world";console.log(`The character at index 0 is '${anyString.charAt()}'`);// No index was provided, used 0 as defaultconsole.log(`The character at index 0 is '${anyString.charAt(0)}'`);console.log(`The character at index 1 is '${anyString.charAt(1)}'`);console.log(`The character at index 2 is '${anyString.charAt(2)}'`);console.log(`The character at index 3 is '${anyString.charAt(3)}'`);console.log(`The character at index 4 is '${anyString.charAt(4)}'`);console.log(`The character at index 999 is '${anyString.charAt(999)}'`);これらの行は以下のように表示されます。
The character at index 0 is 'B'The character at index 0 is 'B'The character at index 1 is 'r'The character at index 2 is 'a'The character at index 3 is 'v'The character at index 4 is 'e'The character at index 999 is ''
charAt() は妥当な Unicode 文字ではない、孤立サロゲートを返す可能性があります。
const str = "𠮷𠮾";console.log(str.charAt(0)); // "\ud842"、これは妥当な Unicode 文字ではないconsole.log(str.charAt(1)); // "\udfb7"、これは妥当な Unicode 文字ではない指定された位置の完全な Unicode コードポイントを取得するには、String.prototype.codePointAt() やスプレッド構文のように、Unicode コードポイントで分割して Unicode コードポイントの配列にするインデックスメソッドを使用してください
const str = "𠮷𠮾";console.log(String.fromCodePoint(str.codePointAt(0))); // "𠮷"console.log([...str][0]); // "𠮷"メモ:charAt() を使用して上記の解決策を再実装することは避けてください。孤立サロゲートの検出とそのペアリングは複雑で、文字列の内部表現を直接使用する組み込み API の方がパフォーマンスが高いかもしれません。必要であれば、上記の API のポリフィルをインストールしてください。
仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-string.prototype.charat> |