ECMAScript | Тип String

Тип String (Строка) — это набор всех упорядоченных последовательностей из нуля или более 16-битных целых чисел без знака («элементов») до максимальной длины 253 — 1 элемента. Тип String обычно используется для представления текстовых данных в запущенной программе ECMAScript, и в этом случае каждый элемент в строке обрабатывается как значение кодовой единицы UTF-16. Каждый элемент считается занимающим позицию в последовательности. Эти позиции индексируются неотрицательными целыми числами. Первый элемент (если есть) имеет индекс 0, следующий элемент (если есть) — индекс 1 и так далее. Длина строки — это количество элементов (т. е. 16-битных значений) внутри неё. Пустая строка имеет нулевую длину и поэтому не содержит элементов.

Операции ECMAScript, которые не интерпретируют содержимое String, не применяют никакой дальнейшей семантики. Операции, которые интерпретируют значения String, обрабатывают каждый элемент как одну кодовую единицу UTF-16. Однако ECMAScript не ограничивает значения или отношения между этими кодовыми единицами, поэтому операции, которые дополнительно интерпретируют содержимое String как последовательности кодовых точек Unicode, закодированных в UTF-16, должны учитывать неправильно сформированные подпоследовательности. Такие операции применяют специальную обработку к каждой кодовой единице с числовым значением в диапазоне от 0xD800 до 0xDBFF (определенному стандартом Unicode как ведущий суррогат (leading surrogate) или, более формально, как высокосуррогатная кодовая единица (high-surrogate code unit)) и каждой кодовой единице с числовым значением в инклюзивном диапазоне от 0xDC00 до 0xDFFF (определенном как конечный суррогат (trailing surrogate) или, более формально, как кодовая единица с низким суррогатом (low-surrogate code unit)), используя следующие правила:

Функция String.prototype.normalize (см. 22.1.3.14) может использоваться для явной нормализации значения String.

String.prototype.localeCompare (см. 22.1.3.11) внутренне нормализует значения String, но никакие другие операции не нормализуют неявно строки, с которыми они работают. Только операции, которые явно указаны как чувствительные к языку или языку, дают результаты, зависящие от языка.

Примечание

Смысл этого дизайна состоял в том, чтобы сделать реализацию Strings как можно более простой и высокопроизводительной. Если исходный текст ECMAScript находится в нормализованной форме C, строковые литералы также будут нормализованы, если они не содержат управляющих последовательностей Unicode.

В этой спецификации фраза «конкатенация строк A, B, …» (где каждый аргумент является значением String, единицей кода или последовательностью единиц кода) обозначает значение String, последовательность единиц кода которой равна объединение единиц кода (по порядку) каждого из аргументов (по порядку).

Фраза «подстрока S от inclusiveStart до exclusiveEnd» (где S — строковое значение или последовательность кодовых единиц, а inclusiveStart и exclusiveEnd — целые числа) обозначает строковое значение, состоящее из последовательных кодовых единиц S, начиная с индекса inclusiveStart и заканчивая непосредственно перед индексом exclusiveEnd (который является пустой строкой, когда inclusiveStart = exclusiveEnd). Если суффикс «to» опущен, длина S используется в качестве значения exclusiveEnd.

6.1.4.1 StringIndexOf ( string, searchValue, fromIndex )

Абстрактная операция StringIndexOf принимает аргументы string (тип String), searchValue (тип String) и fromIndex (неотрицательное целое число). При вызове она выполняет следующие шаги:

1. Пусть len будет длиной строки string.
2. Если searchValue является пустой строкой и fromIndexlen, вернуть fromIndex.
3. Пусть searchLen будет длиной searchValue.
4. Для каждого целого числа i, начинающегося с fromIndex, такого, что ilen - searchLen, в порядке возрастания выполните
   a. Пусть кандидатом candidate будет подстрока строки string от i до i + searchLen.
   b. Если кандидатом candidate является та же последовательность кодовых единиц, что и searchValue, верните i.
5. Вернуть -1
Примечание 1

Если searchValue является пустой строкой, а fromIndex меньше или равно длине строки string, этот алгоритм возвращает fromIndex. Пустая Строка фактически находится в каждой позиции в строке, в том числе после последней единицы кода.

 

Примечание 2

Этот алгоритм всегда возвращает -1, если fromIndex > длины строки string.

Информационные ссылки

Стандарт ECMAScript — Раздел «6.1.4 The String Type» — https://tc39.es/ecma262/#sec-ecmascript-language-types-string-type

Поделись записью