String.prototype.charAt()
=========================

**`charAt()`** は `String` 値のメソッドは、指定されたインデックスにある単一の UTF-16 コード単位からなる新しい文字列を返します。

`charAt()` は常に文字列を UTF-16 コード単位の並びとして索引付けます。そのため、孤立したサロゲートを返す可能性があります。指定されたインデックスの完全な Unicode コードポイントを取得するには、`String.prototype.codePointAt()` および `String.fromCodePoint()` を使用してください。

試してみましょう
--------

構文
--


```js
charAt(index)
```

### 引数

`index`

返される文字のゼロから始まる文字のインデックスです。整数に変換されます。`undefined` は 0 に変換されます。

### 返値

指定された `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"`` という文字列の中の様々な位置の文字を表示します。


```js
const anyString = "Brave new world";
console.log(`The character at index 0 is '${anyString.charAt()}'`);
// No index was provided, used 0 as default

console.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 文字ではない、孤立サロゲートを返す可能性があります。


```js
const str = "𠮷𠮾";
console.log(str.charAt(0)); // "\ud842"、これは妥当な Unicode 文字ではない
console.log(str.charAt(1)); // "\udfb7"、これは妥当な Unicode 文字ではない
```


指定された位置の完全な Unicode コードポイントを取得するには、`String.prototype.codePointAt()` やスプレッド構文のように、Unicode コードポイントで分割して Unicode コードポイントの配列にするインデックスメソッドを使用してください


```js
const str = "𠮷𠮾";
console.log(String.fromCodePoint(str.codePointAt(0))); // "𠮷"
console.log([...str][0]); // "𠮷"
```


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

仕様書
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-string.prototype.charat |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* `String.prototype.indexOf()`
* `String.prototype.lastIndexOf()`
* `String.prototype.charCodeAt()`
* `String.prototype.codePointAt()`
* `String.prototype.split()`
* `String.fromCodePoint()`
* JavaScript has a Unicode problem – Mathias Bynens