aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/javascript/reference/global_objects/string/charat
diff options
context:
space:
mode:
authorPeter Bengtsson <mail@peterbe.com>2020-12-08 14:42:52 -0500
committerPeter Bengtsson <mail@peterbe.com>2020-12-08 14:42:52 -0500
commit074785cea106179cb3305637055ab0a009ca74f2 (patch)
treee6ae371cccd642aa2b67f39752a2cdf1fd4eb040 /files/ru/web/javascript/reference/global_objects/string/charat
parentda78a9e329e272dedb2400b79a3bdeebff387d47 (diff)
downloadtranslated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.gz
translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.bz2
translated-content-074785cea106179cb3305637055ab0a009ca74f2.zip
initial commit
Diffstat (limited to 'files/ru/web/javascript/reference/global_objects/string/charat')
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/charat/index.html270
1 files changed, 270 insertions, 0 deletions
diff --git a/files/ru/web/javascript/reference/global_objects/string/charat/index.html b/files/ru/web/javascript/reference/global_objects/string/charat/index.html
new file mode 100644
index 0000000000..c86dae26aa
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/charat/index.html
@@ -0,0 +1,270 @@
+---
+title: String.prototype.charAt()
+slug: Web/JavaScript/Reference/Global_Objects/String/charAt
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/charAt
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>charAt()</code></strong> возвращает указанный символ из строки.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.charAt(<var>index</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>index</code></dt>
+ <dd>Целое число от 0 до длины строки минус 1.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Символы в строке идут слева направо. Индекс первого символа равен 0, а последнего символа в строке <code>stringName</code> равен <code>stringName.length - 1</code>. Если предоставленный вами параметр <code>index</code> выходит за пределы этого диапазона, JavaScript вернёт пустую строку.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Displaying_characters_at_different_locations_in_a_string" name="Example:_Displaying_characters_at_different_locations_in_a_string">Пример: отображение символов из различных позиций строки</h3>
+<p>Следующий пример показывает символы в различных позициях в строке <code>"Дивный новый мир"</code>:</p>
+<pre class="brush: js">var anyString = 'Дивный новый мир';
+
+console.log("Символ по индексу 0 равен '" + anyString.charAt(0) + "'");
+console.log("Символ по индексу 1 равен '" + anyString.charAt(1) + "'");
+console.log("Символ по индексу 2 равен '" + anyString.charAt(2) + "'");
+console.log("Символ по индексу 3 равен '" + anyString.charAt(3) + "'");
+console.log("Символ по индексу 4 равен '" + anyString.charAt(4) + "'");
+console.log("Символ по индексу 5 равен '" + anyString.charAt(5) + "'");
+console.log("Символ по индексу 999 равен '" + anyString.charAt(999) + "'");
+</pre>
+<p>Этот код отобразит следующее:</p>
+<pre class="brush: js">Символ по индексу 0 равен 'Д'
+Символ по индексу 1 равен 'и'
+Символ по индексу 2 равен 'в'
+Символ по индексу 3 равен 'н'
+Символ по индексу 4 равен 'ы'
+Символ по индексу 5 равен 'й'
+Символ по индексу 999 равен ''
+</pre>
+
+<h3 id="Example:_Getting_whole_characters" name="Example:_Getting_whole_characters">Пример: получение целых символов</h3>
+<p>Следующий пример показывает, как обойти строку в цикле, каждый раз гарантированно получая целый символ, даже если строка содержит символы, не помещающиеся на Базовую многоязыковую плоскость (БМП).</p>
+<pre class="brush: js">var str = 'A \uD87E\uDC04 Z'; // Также можно использовать не-БМП символы напрямую
+for (var i = 0, chr; i &lt; str.length; i++) {
+ if ((chr = getWholeChar(str, i)) === false) {
+ continue;
+ }
+ // Поместите эти строки в самое начало каждого цикла, передавая в функцию строку
+ // и текущую итерацию; возвращаемая переменная будут представлять
+ // отдельный символ
+
+ console.log(chr);
+}
+
+function getWholeChar(str, i) {
+ var code = str.charCodeAt(i);
+
+ if (isNaN(code)) {
+ return ''; // Позиция не найдена
+ }
+ if (code &lt; 0xD800 || code &gt; 0xDFFF) {
+ return str.charAt(i);
+ }
+
+ // Старшая часть суррогатной пары (последнее число можно изменить на 0xDB7F,
+ // чтобы трактовать старшую часть суррогатной пары в частной плоскости как
+ // одиночный символ)
+ if (0xD800 &lt;= code &amp;&amp; code &lt;= 0xDBFF) {
+ if (str.length &lt;= (i + 1)) {
+ throw 'Старшая часть суррогатной пары без следующей младшей';
+ }
+ var next = str.charCodeAt(i + 1);
+ if (0xDC00 &gt; next || next &gt; 0xDFFF) {
+ throw 'Старшая часть суррогатной пары без следующей младшей';
+ }
+ return str.charAt(i) + str.charAt(i + 1);
+ }
+ // Младшая часть суррогатной пары (0xDC00 &lt;= code &amp;&amp; code &lt;= 0xDFFF)
+ if (i === 0) {
+ throw 'Младшая часть суррогатной пары без предшествующей старшей';
+ }
+ var prev = str.charCodeAt(i - 1);
+
+ // (последнее число можно изменить на 0xDB7F, чтобы трактовать старшую
+ // часть суррогатной пары в частной плоскости как одиночный символ)
+ if (0xD800 &gt; prev || prev &gt; 0xDBFF) {
+ throw 'Младшая часть суррогатной пары без предшествующей старшей';
+ }
+ // Теперь мы можем пропустить младшую часть суррогатной пары,
+ // которую мы уже обработали
+ return false;
+}
+</pre>
+<p>В среде, поддерживающей JavaScript 1.7+ (например, в Firefox), который позволяет деструктуризующее присваивание, можно использовать более лаконичную и более гибкую альтернативу в том смысле, что она автоматически увеличивает счётчик (если символ гарантированно является суррогатной парой).</p>
+<pre class="brush: js">var str = 'A\uD87E\uDC04Z'; // Также можно использовать не-БМП символы напрямую
+for (var i = 0, chr; i &lt; str.length; i++) {
+ [chr, i] = getWholeCharAndI(str, i);
+ // Поместите эту строку в самое начало каждого цикла, передавая в функцию строку
+ // и текущую итерацию; возвращаемый массив будет содержать отдельный символ и
+ // новое значение счётчика цикла 'i' (изменится только при встрече суррогатной пары)
+
+ console.log(chr);
+}
+
+function getWholeCharAndI(str, i) {
+ var code = str.charCodeAt(i);
+
+ if (isNaN(code)) {
+ return ''; // Позиция не найдена
+ }
+ if (code &lt; 0xD800 || code &gt; 0xDFFF) {
+ return [str.charAt(i), i]; // Обычный символ, оставляем переменную 'i' неизменной
+ }
+
+ // Старшая часть суррогатной пары (последнее число можно изменить на 0xDB7F,
+ // чтобы трактовать старшую часть суррогатной пары в частной плоскости как
+ // одиночный символ)
+ if (0xD800 &lt;= code &amp;&amp; code &lt;= 0xDBFF) {
+ if (str.length &lt;= (i + 1)) {
+ throw 'Старшая часть суррогатной пары без следующей младшей';
+ }
+ var next = str.charCodeAt(i + 1);
+ if (0xDC00 &gt; next || next &gt; 0xDFFF) {
+ throw 'Старшая часть суррогатной пары без следующей младшей';
+ }
+ return [str.charAt(i) + str.charAt(i + 1), i + 1];
+ }
+ // Младшая часть суррогатной пары (0xDC00 &lt;= code &amp;&amp; code &lt;= 0xDFFF)
+ if (i === 0) {
+ throw 'Младшая часть суррогатной пары без предшествующей старшей';
+ }
+ var prev = str.charCodeAt(i - 1);
+
+ // (последнее число можно изменить на 0xDB7F, чтобы трактовать старшую
+ // часть суррогатной пары в частной плоскости как одиночный символ)
+ if (0xD800 &gt; prev || prev &gt; 0xDBFF) {
+ throw 'Младшая часть суррогатной пары без предшествующей старшей';
+ }
+ // Возвращаем следующий символ (и увеличиваем счётчик)
+ return [str.charAt(i + 1), i + 1];
+}
+</pre>
+
+<h3 id="Example:_Fixing_charAt_to_support_non-Basic-Multilingual-Plane_(BMP)_characters" name="Example:_Fixing_charAt_to_support_non-Basic-Multilingual-Plane_(BMP)_characters">Пример: добавление к методу <code>charAt()</code> поддержки символов не в Базовой многоязыковой плоскости (БМП)</h3>
+<p>В то время как пример выше может быть более полезен тем, кто хочет поддерживать символы не в плоскости БМП (поскольку он не требует от вызывающей стороны знания о том, где может встретиться символ из не-БМП), в случае, если кто-то желает <em>выбирать</em> символы по индексу и трактовать суррогатную пару внутри строки как один символ, он может использовать следующий код:</p>
+<pre class="brush: js">function fixedCharAt(str, idx) {
+ var ret = '';
+ str += '';
+ var 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 '';
+ }
+
+ ret += str.charAt(idx);
+
+ if (/[\uD800-\uDBFF]/.test(ret) &amp;&amp; /[\uDC00-\uDFFF]/.test(str.charAt(idx + 1))) {
+ // Перешагиваем через один, поскольку один «символ» является частью суррогатной пары
+ ret += str.charAt(idx + 1);
+ }
+ return ret;
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.4', 'String.prototype.charAt')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.charat', 'String.prototype.charAt')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("String.prototype.indexOf()")}}</li>
+ <li>{{jsxref("String.prototype.lastIndexOf()")}}</li>
+ <li>{{jsxref("String.prototype.charCodeAt()")}}</li>
+ <li>{{jsxref("String.prototype.codePointAt()")}}</li>
+ <li>{{jsxref("String.prototype.split()")}}</li>
+ <li>{{jsxref("String.fromCodePoint()")}}</li>
+</ul>