aboutsummaryrefslogtreecommitdiff
path: root/files/uk/web/javascript/reference/global_objects/string/charcodeat/index.html
blob: 3ed3a4c450ae46e7c6f84a5635099ac19abba2f3 (plain)
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
---
title: String.prototype.charCodeAt()
slug: Web/JavaScript/Reference/Global_Objects/String/charCodeAt
tags:
  - JavaScript
  - String
  - Unicode
  - метод
translation_of: Web/JavaScript/Reference/Global_Objects/String/charCodeAt
---
<div>{{JSRef}}</div>

<p><span class="seoSummary">Метод <strong><code>charCodeAt()</code></strong> вертає ціле число в діапазоні між <code>0</code> та <code>65535</code>, що відображає кодову одиницю UTF-16 за наданим індексом.</span></p>

<div>{{EmbedInteractiveExample("pages/js/string-charcodeat.html", "shorter")}}</div>



<p>Кодова одиниця UTF-16 співпадає з кодом символа Юнікоду для кодів символів, які можуть бути представлені єдиною кодовою одиницею UTF-16. Якщо код символа Юнікоду не може бути представлений єдиною кодовою одиницею UTF-16 (бо його значення більше за <code>0xFFFF</code>), тоді повернена кодова одиниця буде <em>першою частиною сурогатної пари </em>для коду символа. Якщо вам потрібен весь код символа, використовуйте {{jsxref("Global_Objects/String/codePointAt", "codePointAt()")}}.</p>

<h2 id="Синтаксис">Синтаксис</h2>

<pre class="syntaxbox"><code><var>str</var>.charCodeAt(<var>index</var>)</code></pre>

<h3 id="Параметри">Параметри</h3>

<dl>
 <dt><code><var>index</var></code></dt>
 <dd>Ціле число, що більше або дорівнює <code>0</code> та менше за довжину рядка. Якщо <code><var>index</var></code> не є числом, він за замовчуванням прирівнюється до <code>0</code>.</dd>
</dl>

<h3 id="Значення_що_повертається">Значення, що повертається</h3>

<p>Число, що відображає значення кодової одиниці UTF-16 для символа за наданим індексом <code><var>index</var></code>. Якщо <code><var>index</var></code> знаходиться за межами діапазону, <code>charCodeAt()</code> повертає {{jsxref("Global_Objects/NaN", "NaN")}}.</p>

<h2 id="Опис">Опис</h2>

<p>Коди символів Юнікоду знаходяться в діапазоні від <code>0</code> до <code>1114111</code> <code>(0x10FFFF</code>). Перші 128 кодів символів Юнікоду повністю співпадають з кодуванням символів ASCII. (Інформацію щодо Юнікоду дивіться у <a href="/uk/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Unicode">Посібнику JavaScript</a>.)</p>

<div class="blockIndicator note">
<p><strong>Заувага:</strong> <code>charCodeAt()</code> завжди поверне значення, менше за <code>65536</code>. Тому що більші коди символів відображаються <em>парою</em> (з меншим значенням) "сурогатних" псевдосимволів, що складають реальний символ.</p>

<p>Тому, щоб дослідити (чи відтворити) повний символ для значень окремих символів від <code>65536</code> та більше, для таких символів необхідно отримувати не лише <code>charCodeAt(<var>i</var>)</code>, але також <code>charCodeAt(<var>i</var>+1)</code> (ніби маніпулюючи рядком з двох літер), або використовувати замість цього <code>codePointAt(<var>i</var>)</code>. Дивіться приклади 2 та 3 (нижче).</p>
</div>

<p><code>charCodeAt()</code> повертає {{jsxref("Global_Objects/NaN", "NaN")}}, якщо наданий індекс менший за <code>0</code>, або якщо він дорівнює чи перевищує значення довжини рядка.</p>

<p>Зворотня сумісність: У історичних версіях (наприклад, JavaScript 1.2) метод <code>charCodeAt()</code> вертає число, що вказує значення набору символів ISO-Latin-1 для символа за наданим індексом. Набір символів ISO-Latin-1 знаходиться в діапазоні від <code>0</code> до <code>255</code>. Перші <code>0</code>-<code>127</code> повністю співпадають з набором символів ASCII.</p>

<h2 id="Приклади">Приклади</h2>

<h3 id="Використання_charCodeAt">Використання <code>charCodeAt()</code></h3>

<p>Наступний приклад вертає <code>65</code>, значення Юнікоду для A.</p>

<pre class="brush: js">'ABC'.charCodeAt(0)  // вертає 65
</pre>

<h3 id="Виправлення_charCodeAt_для_обробки_символів_не_базової_багатомовної_площини_якщо_їхня_наявність_раніше_у_рядку_невідома">Виправлення <code>charCodeAt()</code> для обробки символів не базової багатомовної площини, якщо їхня наявність раніше у рядку невідома</h3>

<p>Ця версія може використовуватись для циклів та подібного, коли невідомо, чи були присутні символи не з ББП до вказаної позиції.</p>

<pre class="brush: js">function fixedCharCodeAt(str, idx) {
  // напр. fixedCharCodeAt('\uD800\uDC00', 0); // 65536
  // напр. fixedCharCodeAt('\uD800\uDC00', 1); // false
  idx = idx || 0;
  var code = str.charCodeAt(idx);
  var hi, low;

  // Високий сурогат (може міняти останнє шістнадцяткове значення на 0xDB7F
  // для обробки високих приватних сурогатів
  // як єдиних символів)
  if (0xD800 &lt;= code &amp;&amp; code &lt;= 0xDBFF) {
    hi = code;
    low = str.charCodeAt(idx + 1);
    if (isNaN(low)) {
      throw 'Високий сурогат без наступного ' +
        'низького сурогату у fixedCharCodeAt()';
    }
    return (
      (hi - 0xD800) * 0x400) +
      (low - 0xDC00) + 0x10000;
  }
  if (0xDC00 &lt;= code &amp;&amp; code &lt;= 0xDFFF) { // Низький сурогат
    // Ми вертаємо false, щоб дозволити циклам пропустити
    // цю ітерацію, бо мали вже обробити
    // високий сурогат вище у попередній ітерації
    return false;
    // hi = str.charCodeAt(idx - 1);
    // low = code;
    // return ((hi - 0xD800) * 0x400) +
    //   (low - 0xDC00) + 0x10000;
  }
  return code;
}
</pre>

<h3 id="Виправлення_charCodeAt_для_обробки_символів_не_базової_багатомовної_площини_якщо_їхня_наявність_раніше_у_рядку_відома">Виправлення <code>charCodeAt()</code> для обробки символів не базової багатомовної площини, якщо їхня наявність раніше у рядку відома</h3>

<pre class="brush: js">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 &lt; idx) {
      idx++;
    }
    else {
      break;
    }
  }

  if (idx &gt;= end || idx &lt; 0) {
    return NaN;
  }

  code = str.charCodeAt(idx);

  var hi, low;
  if (0xD800 &lt;= code &amp;&amp; code &lt;= 0xDBFF) {
    hi = code;
    low = str.charCodeAt(idx + 1);
    // Пройти на один далі, оскільки один з "символів"
    // є частиною сурогатної пари
    return ((hi - 0xD800) * 0x400) +
      (low - 0xDC00) + 0x10000;
  }
  return code;
}
</pre>

<h2 id="Специфікації">Специфікації</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Специфікація</th>
  </tr>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-string.prototype.charcodeat', 'String.prototype.charCodeAt')}}</td>
  </tr>
 </tbody>
</table>

<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2>

<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>

<p>{{Compat("javascript.builtins.String.charCodeAt")}}</p>

<h2 id="Див._також">Див. також</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>