1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
---
title: String.prototype.charCodeAt()
slug: Web/JavaScript/Reference/Global_Objects/String/charCodeAt
tags:
- JavaScript
- Method
- Reference
- String
- Unicode
translation_of: Web/JavaScript/Reference/Global_Objects/String/charCodeAt
---
<div>{{JSRef}}</div>
<p><span class="seoSummary"><strong><code>charCodeAt()</code></strong> メソッドは、指定された位置にある UTF-16 コードユニットを表す <code>0</code> から <code>65535</code> までの整数を返します。</span></p>
<div>{{EmbedInteractiveExample("pages/js/string-charcodeat.html", "shorter")}}</div>
<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div>
<p>単一の UTF-16 コードユニットで表現可能なコードポイントであれば、 UTF-16 コードユニットは Unicode コードポイントと一致します。 Unicode コードポイントが単一の UTF-16 コードユニットで表現できない場合 (値が <code>0xFFFF</code> を超える場合)、返されるコードユニットはそのコードポイントの<em>サロゲートペアの最初の部分</em>になります。コードポイント値全体を取得したい場合は、 {{jsxref("Global_Objects/String/codePointAt", "codePointAt()")}} を使用してください。</p>
<h2 id="Syntax" name="Syntax">構文</h2>
<pre class="syntaxbox notranslate"><var>str</var>.charCodeAt(<var>index</var>)</pre>
<h3 id="Parameters" name="Parameters">引数</h3>
<dl>
<dt><code><var>index</var></code></dt>
<dd>整数で、 <code>0</code> 以上、文字列の <code>length</code> 未満の値です。 <code><var>index</var></code> が数値でない場合は、既定で <code>0</code> になります。</dd>
</dl>
<h3 id="Return_value" name="Return_value">返値</h3>
<p>与えられた <code><var>index</var></code> の位置にあるコードポイント値を表す数値です。 <code><var>index</var></code> の位置に要素がない場合は {{jsxref("Global_Objects/NaN", "NaN")}} を返します。</p>
<h2 id="Description" name="Description">解説</h2>
<p>Unicode コードポイントの範囲は、 <code>0</code> から <code>1114111</code> (<code>0x10FFFF</code>) です。最初の 128 の Unicode コードポイントは、 ASCII 文字エンコーディングに直接対応しています。 (Unicode についての詳細は、<a href="/ja/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Unicode">Java Script ガイド</a>を参照してください。)</p>
<div class="blockIndicator note">
<p><strong>注:</strong> <code>charCodeAt()</code> は常に <code>65536</code> より小さい値を返すことに注意してください。これは、より高いコードポイントは、実際の文字を含むように使用されている (下の値) の "代理" 擬似文字のペアで表されているためです。</p>
<p>これにより、 <code>65536</code> 以上の値の個々の文字について完全な文字を検証したり再現したりするためには、 <code>charCodeAt(<var>i</var>)</code> だけではなく、 <code>charCodeAt(<var>i</var>+1)</code> (2 文字の文字列を検証/再現する場合) か <code>codePointAt(<var>i</var>)</code> を代わりに使用する必要があります。下記の例 2 と 3 を見てください。</p>
</div>
<p>与えられたインデックスが 0 と文字列の長さの間にない場合、<code>charCodeAt()</code> は {{jsxref("Global_Objects/NaN", "NaN")}} を返します。</p>
<p>後方互換: (JavaScript 1.2 などの) 過去のバージョンでは、 <code>charCodeAt()</code> メソッドは、与えられた位置の文字の ISO-Latin-1 コードセットの値を示す数を返します。 ISO-Latin-1 コードセットの範囲は 0 から 255 です。最初の 0 から 127 までは ASCII 文字セットに直接対応しています。</p>
<h2 id="Examples" name="Examples">例</h2>
<h3 id="Using_charCodeAt" name="Using_charCodeAt">charCodeAt() の使用</h3>
<p>以下の例では、 Unicode 文字の A である <code>65</code> を返します。</p>
<pre class="brush: js notranslate">'ABC'.charCodeAt(0) // returns 65
</pre>
<h3 id="Fixing_charCodeAt_to_handle_non-Basic-Multilingual-Plane_characters_if_their_presence_earlier_in_the_string_is_unknown" name="Fixing_charCodeAt_to_handle_non-Basic-Multilingual-Plane_characters_if_their_presence_earlier_in_the_string_is_unknown">基本多言語面以外の文字が文字列の前方に存在するかどうか不明な場合に扱えるように charCodeAt() を修正</h3>
<p>このバージョンは、指定された位置の前に BMP 以外の文字が存在するかどうかが不明な場合に、 for ループなどで使用されることがあります。</p>
<pre class="brush: js notranslate">function fixedCharCodeAt(str, idx) {
// ex. fixedCharCodeAt('\uD800\uDC00', 0); // 65536
// ex. fixedCharCodeAt('\uD800\uDC00', 1); // false
idx = idx || 0;
var code = str.charCodeAt(idx);
var hi, low;
// High surrogate (could change last hex to 0xDB7F
// to treat high private surrogates
// as single characters)
if (0xD800 <= code && code <= 0xDBFF) {
hi = code;
low = str.charCodeAt(idx + 1);
if (isNaN(low)) {
throw 'High surrogate not followed by ' +
'low surrogate in fixedCharCodeAt()';
}
return (
(hi - 0xD800) * 0x400) +
(low - 0xDC00) + 0x10000;
}
if (0xDC00 <= code && code <= 0xDFFF) { // Low surrogate
// We return false to allow loops to skip
// this iteration since should have already handled
// high surrogate above in the previous iteration
return false;
// hi = str.charCodeAt(idx - 1);
// low = code;
// return ((hi - 0xD800) * 0x400) +
// (low - 0xDC00) + 0x10000;
}
return code;
}
</pre>
<h3 id="文字列の前方に基本多言語面以外の文字が存在することが分かっている場合に扱えるように_charCodeAt_を修正">文字列の前方に基本多言語面以外の文字が存在することが分かっている場合に扱えるように charCodeAt() を修正</h3>
<pre class="brush: js notranslate">function knownCharCodeAt(str, idx) {
str += '';
var code,
end = str.length;
var surrogatePairs = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
while ((surrogatePairs.exec(str)) != null) {
var li = surrogatePairs.lastIndex;
if (li - 2 < idx) {
idx++;
}
else {
break;
}
}
if (idx >= end || idx < 0) {
return NaN;
}
code = str.charCodeAt(idx);
var hi, low;
if (0xD800 <= code && code <= 0xDBFF) {
hi = code;
low = str.charCodeAt(idx + 1);
// Go one further, since one of the "characters"
// is part of a surrogate pair
return ((hi - 0xD800) * 0x400) +
(low - 0xDC00) + 0x10000;
}
return code;
}
</pre>
<h2 id="Specifications" name="Specifications">仕様書</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">仕様書</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{SpecName('ESDraft', '#sec-string.prototype.charcodeat', 'String.prototype.charCodeAt')}}</td>
</tr>
</tbody>
</table>
<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2>
<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div>
<p>{{Compat("javascript.builtins.String.charCodeAt")}}</p>
<h2 id="See_also" name="See_also">関連情報</h2>
<ul>
<li>{{jsxref("String.fromCharCode()")}}</li>
<li>{{jsxref("String.prototype.charAt()")}}</li>
<li>{{jsxref("String.fromCodePoint()")}}</li>
<li>{{jsxref("String.prototype.codePointAt()")}}</li>
</ul>
|