Movatterモバイル変換


[0]ホーム

URL:


  1. Веб-технологии для разработчиков
  2. JavaScript
  3. Справочник по JavaScript
  4. Лексический синтаксис

This page was translated from English by the community.Learn more and join the MDN Web Docs community.

View in EnglishAlways switch to English

Лексический синтаксис

Этот раздел описывает синтаксис JavaScript. Исходный код ECMAScript скриптов сканируется слева направо и преобразуется в последовательность найденных элементов в токены, управляющие символы, окончания строк, комментарии или пробелы.

ECMAScript также определяет ключевые слова и литералы и имеет указания для автоматической вставки точек с запятой к концу инструкции.

Спецсимволы

Спецсимволы не имеют визуального представления, однако используются для управления интерпретацией текста.

Code pointNameAbbreviationDescription
U+200CZero width non-joiner<ZWNJ>Размещается между символами во избежание их соединений в лигатуры для некоторых языков (Wikipedia)
U+200DZero width joiner<ZWJ>Размещается между символами, которые не могли бы нормально объединиться для того, чтобы символы отрисовывались, используя их соединительную форму в некоторых языках (Wikipedia)
U+FEFFByte order mark<BOM>Используется вначале скрипта для того, чтобы пометить Юникод и порядок байтов (Wikipedia)

Пробелы

Пробельные символы улучшают читабельность исходного текста и разделяет токены друг от друга. Пробельные символы обычно не обязательны для функционирования кода.Утилиты для уменьшения объёма кода часто удаляют пробельные символы, чтобы уменьшить объем кода.

Code pointNameAbbreviationDescriptionEscape sequence
U+0009Character tabulation<HT>Горизонтальная табуляция\t
U+000BLine tabulation<VT>Вертикальная табуляция\v
U+000CForm feed<FF>Символ контроля разрыва страницы (Wikipedia)\f
U+0020Space<SP>Обычный пробел
U+00A0No-break space<NBSP>Обычный пробел без точки, на которой может произойти разрыв страницы
OthersOther Unicode space characters<USP>Другие символы в Википедии

Окончание строк

В дополнение к пробельным символам, символы окончания строк тоже используются для читабельности исходного кода. Однако, в некоторых случаях, символы окончания строк могут влиять на выполнение JavaScript-кода, т.к. есть некоторые места, где они запрещены.

Окончания строк также затрагивают процессавтоматического проставления точки с запятой. Также окончания строк попадают под условиярегулярных выражений при поиске\s класса.

В ECMAScript, в качестве окончания строк можно использовать только ниже перечисленные Юникод символы. Другие символы окончания строк будут интерпретированы, как пробельные символы (например, Next Line, NEL, U+0085 будут интерпретироваться, как пробельные символы).

Code pointNameAbbreviationDescriptionEscape sequence
U+000ALine Feed<LF>Новая строка в UNIX системах.\n
U+000DCarriage Return<CR>Новая строка в Commodore и ранних Mac systems.\r
U+2028Line Separator<LS>Wikipedia
U+2029Paragraph Separator<PS>Wikipedia

Комментарии

Комментарии используются для добавления подсказок, заметок, предложений или предупреждений. Они могут упростить чтение и понимание кода. Также они могут быть использованы для предотвращения выполнения кода (этот приём практикуется при отладке кода).

В JavaScript есть несколько способов указать комментарии в коде.

Первый способ// комментарий; в этом случае весь текст в строке после двойного слеша будет комментарием, например:

js
function comment() {  // Это комментарий в строке  console.log("Hello world!");}comment();

Второй способ - это/* */, такой способ более гибок, чем первый.

Например, вы можете использовать его в одной строке:

js
function comment() {  /* Это однострочный комментарий */  console.log("Hello world!");}comment();

Либо вы можете сделать многострочный комментарий, как показано здесь:

js
function comment() {  /* Этот комментарий располагается на нескольких линиях.     Обратите внимание, что вам не нужно обрывать комментарий, пока вы его не закончите*/  console.log("Hello world!");}comment();

Также, если пожелаете, то вы можете использовать такое комментирование посреди строки кода. Хотя это может ухудшить читабельность кода:

js
function comment(x) {  console.log("Hello " + x /* вставьте значение x */ + " !");}comment("world");

Чтобы отключить выполнение кода, просто оберните код в комментарий, как здесь:

js
function comment() {  /* console.log("Hello world!"); */}comment();

В этом случаеconsole.log() никогда не выполнится, пока он внутри комментария. Таким способом можно отключить любое количество строк кода.

Шебанг комментарии

Третий специализированный синтаксис комментариев,шебанг комментарий, в процессе стандартизации в ECMAScript (смотретьHashbang Grammar proposal).

Шебанг комментарий ведёт себя точно также как и однострочный (//) комментарий. Вместо этого, он начинается с#! идействителен только в самом начале скрипта или модуля. Обратите внимание, что никакие пробелы не разрешены перед#!. Комментарий состоит из всех символов после#! до конца первой строки; только такой комментарий разрешён.

Шебанг комментарий определяет путь к JavaScript интерпретатору, скрипт которого вы хотите выполнить. Пример, как это работает:

js
#!/usr/bin/env nodeconsole.log("Hello world");

Примечание:Hashbang comments in JavaScript mimicshebangs in Unix used to run files with proper interpreter.

Предупреждение:AlthoughBOM before hashbang comment will work in a browser it is not advised to use BOM in a script with hasbang. BOM will not work when you try to run the script in Unix/Linux. So use UTF-8 without BOM if you want to run scripts directly from shell.

Для определения JavaScript интерпретатора используйте только#! . В любых других случаях используйте// (или многострочный комментарий).

Ключевые слова

Зарезервированные ключевые слова в ECMAScript 2015

Ключевые слова, зарезервированные на будущее

Следующие ключевые слова зарезервированы на будущее ECMAScript спецификацией. За ними сейчас не стоит никакой функциональности, но она может появиться в будущих версиях, поэтому эти ключевые слова не могут быть использованы, как идентификаторы. Эти ключевые слова не могут быть использованы даже в strict или non-strict режимах.

  • enum
  • await

Следующие ключевые слова зарезервированы для кода, который выполняется в strict режиме:

  • implements
  • package
  • protected
  • static
  • interface
  • private
  • public

Зарезервированные ключевые слова в более старых версиях

Перечисленные ниже ключевые слова зарезервированы для старых версий ECMAScript спецификаций (ECMAScript от 1 по 3).

  • abstract
  • boolean
  • byte
  • char
  • double
  • final
  • float
  • goto
  • int
  • long
  • native
  • short
  • synchronized
  • transient
  • volatile

К тому же, литералыnull,true, иfalse зарезервированы в ECMAScript для их обычной функциональности.

Использование зарезервированных слов

Зарезервированные слова действительно применяются только к идентификаторам(vs. IdentifierNames). Как описано вes5.github.com/#A.1, это все имена IdentifierNames, которые не исключают зарезервированных слов.

js
a.importa["import"]a = { import: "test" }.

С другой стороны, следующее выражение неправильно, т.к. ИдентификаторIdentifierName не содержит зарезервированных слов. Идентификаторы используются дляFunctionDeclaration, FunctionExpression, VariableDeclaration и т.п., в то время, какIdentifierNames используются дляMemberExpression, CallExpression и т.п.

js
function import() {} // неправильно.

Литералы

Литерал Null

Подробнее оnullnull.

js
null;

Литерал Boolean

Подробнее оBoolean.

js
true;false;

Литералы чисел

Decimal (десятичные числа)

js
1234567890;42;// Будьте осторожны с использованием нуля вначале числа:0888; // 888 распознается, как десятичное число0777; // распознается, как восьмеричное число, 511 - как десятичное число

Имейте в виду, что литералы десятичных чисел могут начинаться с нуля (0), за которым следует другое десятичное число, но в случае, если число начинается с нуля и за ним идёт цифра меньше 8, то число будет распознано как восьмеричное. This won't throw in JavaScript, seeFirefox bug 957513. See also the page aboutparseInt().

Binary (двоичные числа)

Синтаксис двоичных чисел состоит из цифры ноль, за которой следует маленькая или большая латинская буква "B" (0b или 0B). Этот синтаксис новый и появился только в ECMAScript 2015, пожалуйста посмотрите таблицу совместимости с браузерами. Это может производить ошибкуSyntaxError: "Missing binary digits after 0b", Если цифры не 0 или 1.

js
var FLT_SIGNBIT = 0b10000000000000000000000000000000; // 2147483648var FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040var FLT_MANTISSA = 0b00000000011111111111111111111111; // 8388607

Octal (восьмеричные числа)

Восьмеричный числовой синтаксис, который использует 0 с последующей, в нижнем или верхнем регистре, латинскую букву "О" (0o или0O). Этот синтаксис появился в ECMAScript 2015, пожалуйста, посмотрите таблицу совместимости с браузерами. Это может производить ошибкуSyntaxError: "Missing octal digits after 0o", если цифры не между 0 и 7.

js
var n = 0o755; // 493var m = 0o644; // 420// Так же возможно с лидирующими нулями (см. заметку о десятичных дробях выше)0755;0644;

Hexadecimal (шестнадцатеричные числа)

Шестнадцатеричный числовой синтаксис, который использует 0 с последующей, в нижнем или верхнем регистре, латинскую букву "X" (0x или0X). Если числа после 0x вне диапазона (0123456789ABCDEF), то может последовать за этимSyntaxError: "Identifier starts immediately after numeric literal".

js
0xfffffffffffffffff; // 2951479051793528300000x123456789abcdef; // 819855292164869000xa; // 10

Литерал Object (Объект)

Смотрите такжеObject иObject initializer для получения более подробной информации.

js
var o = { a: "foo", b: "bar", c: 42 };// сокращённая нотация. Появилась в ES2015var a = "foo",  b = "bar",  c = 42;var o = { a, b, c };// вместоvar o = { a: a, b: b, c: c };

Литерал Array (Массив)

Смотрите такжеArray для получения более подробной информации.

js
[1954, 1974, 1990, 2014];

Литерал String (Строка)

js
'foo';"bar";

Экранирование шестнадцатеричной последовательности

js
"\xA9"; // "©"

Экранирование Юникод символов

Для экранирования Юникод символов обязательно нужно указать по крайней мере 4 символа после \u.

js
"\u00A9"; // "©"

Unicode code point escapes

Новое в ECMAScript 2015. With Unicode code point escapes, any character can be escaped using hexadecimal numbers so that it is possible to use Unicode code points up to0x10FFFF. With simple Unicode escapes it is often necessary to write the surrogate halves separately to achieve the same.

See alsoString.fromCodePoint() orString.prototype.codePointAt().

js
"\u{2F804}";// the same with simple Unicode escapes"\uD87E\uDC04";

Литерал Регулярного выражения

Смотрите такжеRegExp для получения более подробной информации.

js
/ab+c/g// An "empty" regular expression literal// The empty non-capturing group is necessary// to avoid ambiguity with single-line comments./(?:)/

Литерал Шаблона

Смотрите такжеtemplate strings для получения более подробной информации.

js
`string text`;`string text line 1 string text line 2`;`string text ${expression} string text`;tag`string text ${expression} string text`;

Автоматическая вставка "точки с запятой"

НекоторыеJavaScript условия должны быть завершены точкой с запятой и поэтому на них влияет автоматическая вставка точки с запятой (ASI):

  • Пустое условие
  • let,const, переменные
  • import,export, объявление модулей
  • Оператор-выражение
  • debugger
  • continue,break,throw
  • return

1. Точка с запятой ставится до, когда ограничитель строки или "}" is encountered that is not allowed by the grammar.

js
{ 1 2 } 3// согласно ASI, будет преобразовано в{ 1 2 ;} 3;

2. Точка с запятой ставится в конце, когда обнаружен конец вводимой строки токенов и парсер is unable to parse the single input stream as a complete program.

Here++ is not treated as apostfix operator applying to variableb, because a line terminator occurs betweenb and++.

js
a = b++c// согласно ASI, будет преобразовано вa = b;++c;

3. Точка с запятой вставляется в конце, когда согласно инструкции с ограниченным производством в грамматике следует ограничитель строки. Эти утверждения с правилами «no LineTerminator here» здесь:

  • PostfixExpressions (++ and--)
  • continue
  • break
  • return
  • yield,yield*
  • module
js
returna + b// согласно ASI, будет преобразовано вreturn;a + b;

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

Specification
ECMAScript® 2026 Language Specification

Совместимость с браузерами

Особенности Firefox

  • Prior to Firefox 5 (JavaScript 1.8.6), future reserved keywords could be used when not in strict mode. This ECMAScript violation was fixed in Firefox 5.

Смотрите также

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp