Спецификация ECMAScript 5.1 с аннотациями

Поделиться

6 Исходный текст #

Исходный текст на ECMAScript представлен как последовательность символов в кодировке Юникод версии 3.0 или более поздней. Текст должен быть нормализован в соответствии с Формой нормализации "С" (каноническая композиция), в соответствии с описанием в Техническом отчёте № 15 стандарта Юникод. К реализациям ECMAScript, соответствующим стандарту, не предъявляется требований производить нормализацию текста, или вести себя так, словно они производят его нормализацию. Предполагается, что исходный текст на ECMAScript представляет собой последовательность 16-битовых кодовых единиц в целях данной спецификации. Такой исходный текст может включать в себя последовательности 16-битовых кодовых единиц, которые не являются действительными символами в кодировке UTF-16. Если фактический исходный текст был закодирован не в виде 16-битовых кодовых единиц, он должен обрабатываться так, как если бы он сначала был преобразован в UTF-16.

SourceCharacter ::

любой символ Юникода

Во всем тексте данного документа фраза "кодовая единица" code unit или слово "символ" character будут означать 16-битовое беззнаковое значение, используемое для представления одной 16-битовой единицы текста. Фраза "символ Юникода" Unicode character будет использоваться для обозначения абстрактной лингвистической или типографической единицы, представленной единичной скалярной величиной в формате юникода, которая может быть длиннее 16 битов и поэтому может быть представлена не одной, а несколькими кодовыми единицами. Для обозначения такой скалярной величины используется фраза "кодовая точка" code point. Фраза "символ Юникода" характеризует только сущности, представленные одиночными скалярными величинами: компоненты объединённой последовательности символов всё равно являются отдельными "символами Юникода", хотя пользователь может воспринимать всю последовательность как один символ.

В строковых литералах, литералах регулярных выражений и идентификаторах любой символ (кодовая единица) может быть также выражен в виде управляющей последовательности escape sequence, состоящей из шести символов Юникода, а именно: \u плюс четыре шестнадцатиричные цифры. В составе комментария такая управляющая последовательность успешно игнорируется как часть комментария. В составе строкового литерала или литерала регулярного выражения такая управляющая последовательность отдаёт один символ значению этого литерала. В составе идентификатора такая управляющая последовательность отдает один символ этому идентификатору.

ПРИМЕЧАНИЕ Несмотря на то, что в данном документе иногда говорится о "преобразовании" между "символом" в "строке" и 16-битовым беззнаковым целым, в действительности никакой трансформации нет, поскольку "символ" в "строке" фактически представлен посредством этого 16-битового беззнакового целого.

ECMAScript отличается от языка программирования Java в вопросе поведения управляющих последовательностей Юникода. В программе на Java, например, если управляющая последовательность Юникода \u000A, встречается в рамках однострочного комментария, она трактуется как символ окончания строки (символ Юникода 000A – перевод строки), поэтому следующий за ней символ не является частью комментария. Аналогично, если в строковом литерале в программе на Java встречается управляющая последовательность \u000A, она также трактуется как символ окончания строки, который в строковом литерале не допускается – необходимо писать \n вместо \u000A, чтобы перевод строки стал частью строкового значения строкового литерала. А в программе на ECMAScript управляющая последовательность юникода, находясь в составе комментария, не подлежит трактованию и поэтому не может означать окончание комментария. Аналогично, управляющая последовательность в строковом литерале в программе на ECMAScript всегда передаёт один символ строковому значению литерала и не трактуется как символ окончания строки или как кавычки, которые могут означать окончание строкового литерала.