Программы JavaScript написаны с использованием набора символов Юникода, что означает, что вы можете использовать любые символы Юникода в строках и комментариях. В целях переносимости и удобства редактирования в идентификаторах рекомендуется использовать только буквы и цифры ASCII. Однако это всего лишь соглашение по программированию; сам язык поддерживает использование букв, цифр и идеограмм Юникода в идентификаторах (но не символов эмодзи). Это означает, что имена констант или переменных могут включать математические символы или неанглийские символы:
const n = 3.14; const sí = true;
Escape-последовательности Юникода.
Некоторое компьютерное оборудование и программное обеспечение могут неправильно отображать, вводить или обрабатывать все символы Юникода. Чтобы облегчить кодирование и поддержку систем, использующих старые технологии, JavaScript определяет escape-последовательности, которые позволяют представлять символы Юникода, используя только символы ASCII. Эти escape-последовательности Юникода начинаются с \u, за которым следуют четыре шестнадцатеричные цифры (включая прописные и строчные буквы от A до F), или они могут быть заключены в фигурные скобки и состоять из 1–6 шестнадцатеричных цифр. Escape-последовательности Юникода могут появляться в строковых литералах JavaScript, литералах регулярных выражений и идентификаторах (но не в ключевых словах языка). Например, escape-последовательность Юникода для символа «é» — é. Вот три примера использования этого символа в переменной:
// Define a variable using a Unicode character let café = 1; // Access the variable using an escape sequence caf\u00E9 // Another form of the same escape sequence caf\u{E9}
Более ранние версии JavaScript поддерживали только 4-значные числовые escape-последовательности. Версия с фигурными скобками была представлена в ES6 для лучшей поддержки кодовых точек Unicode длиной более 16 бит, таких как символы эмодзи:
// Print a smiley face emoji console.log("\u{1F600}");
Escape-последовательности Unicode также могут появляться в комментариях, но, поскольку комментарии игнорируются, escape-последовательности в комментариях обрабатываются как символы ASCII и не интерпретируются как Unicode.
(Мягкие навыки для программистов: amazon.com/dp/B0CF599P8J)
Нормализация Unicode.
Если вы используете в своей программе символы, отличные от ASCII, вам необходимо знать, что Unicode допускает несколько форм кодирования для одного и того же символа. Например, строку «é» можно закодировать как символ Юникода é или как обычный символ ASCII «e», за которым следует комбинированный острый акцент ́. Обе кодировки могут выглядеть одинаково в текстовом редакторе, но имеют разные двоичные представления. Поэтому JavaScript считает их разными, что может привести к проблемным ситуациям:
// This constant is named "caf\u{e9}" const café = 1; // This constant is different: "cafe\u{301}" const café = 2; // => 1: This constant has a value café // => 2: This different constant has a different value café
Стандарт Unicode определяет предпочтительные кодировки для всех символов и определяет процедуры нормализации для преобразования текста в каноническую форму, пригодную для сравнения. JavaScript предполагает, что интерпретируемый им исходный код уже нормализован, и сам не выполняет никакой нормализации. Если вы хотите использовать символы Юникода в своей программе JavaScript, убедитесь, что вы используете нормализацию Юникода в исходном коде с помощью редактора или других инструментов, чтобы избежать появления идентификаторов, которые выглядят одинаково, но на самом деле различаются.
(Мягкие навыки для программистов: amazon.com/dp/B0CF599P8J)