Исходный текст в ECMAScript представляется в виде последовательности символов в кодировке Юникод версии 2.1 или более поздней с использованием формата трансформации UTF-16. Текст должен быть нормализован к форме нормализации C (канонической композиции), описание которой приведено в приложении 15 к стандарту Юникода (UAX-15). От корректных реализаций ECMAScript не требуется проведение никаких операций по нормализации текста и не требуется вести себя так, будто они производят его нормализацию.
- ИсходныйСимвол ::
- любой символ Unicode
Исходный текст на ECMAScript может содержать любые символы Юникода. Все символы Юникода, означающие пробел, обрабатываются как символ пробела, и все символы Юникода, обозначающие разделение строк или абзацев, обрабатываются как разделители строк. Не принадлежащие к латинице символы Юникода разрешены к использованию в идентификаторах, строковых литералах, литералах регулярных выражений и комментариях.
Далее по тексту документа словосочетание "кодовая точка" и слово "символ" будут использоваться для обозначения 16-разрядного беззнакового значения, используемого для представления единичного элемента текста в кодировке UTF-16. Словосочетание "символ Юникода" будет использоваться для обозначения абстрактной лингвистической или типографической единицы, представленной единичным числовым значением Юникода (которое может быть длинее 16-ти бит и, таким образом, может быть представлено более чем одной кодовой точкой). Это обозначение применяется только к сущностям, соответствующим одному числовому значению Юникода. Компоненты композиций являются отдельными "символами Юникода", даже если с точки зрения пользователя вся композиция выглядит как один символ.
В строковых литералах, литералах регулярных выражений и идентификаторах любой символ (кодовая точка) может быть также представлен как юникодная escape-последовательность, состоящая из шести символов: комбинация \u и следующие за ней четыре шестнадцатеричные цифры. В составе комментария такая escape-последовательность принимается за часть комментария и просто игнорируется. В составе строкового литерала или литерала регулярного выражения юникодная escape-последовательность трактуется как единичный символ литерала. В составе идентификатора escape-последовательность трактуется как единичный символ идентификатора.
ЗАМЕЧАНИЕ 1
Хотя в данном документе иногда упоминается "преобразование" между "символом строки" и 16-разрядным беззнаковым целым, являющимся кодом UTF-16 для этого символа, на самом деле никакого преобразования не производится, т.к. "символ строки" в действительности представляется при помощи этого 16-разрядного символа.
ЗАМЕЧАНИЕ 2
Язык ECMAScript отличается от языка программирования Java в области поведения юникодных escape-последовательностей. В программе на Java, например, если escape-последовательность \u000A встречается в составе однострочного комментария, она трактуется как символ окончания строки (символ Юникода 000A - "перевод строки"), и, таким образом, следующий за ней символ уже не считается частью комментария. Аналогично, если юникодная escape-последовательность \u000A встречается в строковом литерале программы на Java, она тоже трактуется как символ конца строки, который недопустим в строковом литерале (в Java, чтобы включить в строковой литерал символ перевода строки, вместо \u000A следует писать \n). В программе на ECMAScript юникодная escape-последовательность в составе комментария не подлежит расшифровке и, таким образом, не может означать окончания комментария. Аналогично, юникодная escape-последовательность в составе строкового литерала в программе на ECMAScript всегда трактуется как один из символов в значении строки и не может быть расшифрована как символ конца строки или символ кавычки, которые могут означать окончание строкового литерала.