From 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:43:23 -0500 Subject: initial commit --- .../global_objects/string/charcodeat/index.html | 161 +++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 files/uk/web/javascript/reference/global_objects/string/charcodeat/index.html (limited to 'files/uk/web/javascript/reference/global_objects/string/charcodeat') diff --git a/files/uk/web/javascript/reference/global_objects/string/charcodeat/index.html b/files/uk/web/javascript/reference/global_objects/string/charcodeat/index.html new file mode 100644 index 0000000000..3ed3a4c450 --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/string/charcodeat/index.html @@ -0,0 +1,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 +--- +
{{JSRef}}
+ +

Метод charCodeAt() вертає ціле число в діапазоні між 0 та 65535, що відображає кодову одиницю UTF-16 за наданим індексом.

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

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

+ +

Синтаксис

+ +
str.charCodeAt(index)
+ +

Параметри

+ +
+
index
+
Ціле число, що більше або дорівнює 0 та менше за довжину рядка. Якщо index не є числом, він за замовчуванням прирівнюється до 0.
+
+ +

Значення, що повертається

+ +

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

+ +

Опис

+ +

Коди символів Юнікоду знаходяться в діапазоні від 0 до 1114111 (0x10FFFF). Перші 128 кодів символів Юнікоду повністю співпадають з кодуванням символів ASCII. (Інформацію щодо Юнікоду дивіться у Посібнику JavaScript.)

+ +
+

Заувага: charCodeAt() завжди поверне значення, менше за 65536. Тому що більші коди символів відображаються парою (з меншим значенням) "сурогатних" псевдосимволів, що складають реальний символ.

+ +

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

+
+ +

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

+ +

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

+ +

Приклади

+ +

Використання charCodeAt()

+ +

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

+ +
'ABC'.charCodeAt(0)  // вертає 65
+
+ +

Виправлення charCodeAt() для обробки символів не базової багатомовної площини, якщо їхня наявність раніше у рядку невідома

+ +

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

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

Виправлення charCodeAt() для обробки символів не базової багатомовної площини, якщо їхня наявність раніше у рядку відома

+ +
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);
+    // Пройти на один далі, оскільки один з "символів"
+    // є частиною сурогатної пари
+    return ((hi - 0xD800) * 0x400) +
+      (low - 0xDC00) + 0x10000;
+  }
+  return code;
+}
+
+ +

Специфікації

+ + + + + + + + + + +
Специфікація
{{SpecName('ESDraft', '#sec-string.prototype.charcodeat', 'String.prototype.charCodeAt')}}
+ +

Сумісність з веб-переглядачами

+ + + +

{{Compat("javascript.builtins.String.charCodeAt")}}

+ +

Див. також

+ + -- cgit v1.2.3-54-g00ecf