Синтаксис JavaScript – это набор правил, как создаются программы JavaScript. В этом уроке мы рассмотрим базовые лексические структуры языка.

Набор символов

При написании программ на JavaScript используется набор символов Unicode. В отличие от 7-разрядной кодировки , подходящей только для английского языка, и 8-разрядной кодировки , подходящей только для английского и основных западноевропейских языков, 16-разрядная кодировка Unicode поддерживает практически все письменные языки, имеющиеся на планете. Стандарт ECMAScript v3 требует, чтобы реализации JavaScript обеспечивали поддержку стандарта Unicode версии 2.1 или выше, а стандарт ECMAScript v5 требует, чтобы реализации обеспечивали поддержку стандарта Unicode версии 3 или выше.

Var str = "hello, world!"; // Используется латиница var стр = "Привет, мир!"; // Используется кириллица

Пробельные символы

Пробельные символы улучшают читаемость исходного кода, но эти символы, как правило, не нужны для функциональности js-сценария.

Пробельные символы
Код символа Название Сокращение Описание Escape последовательность
U + 0009 Горизонтальная табуляция Перемещает позицию печати к следующей позиции горизонтальной табуляции \t
U + 000B Вертикальная табуляция Перемещает позицию печати к следующей позиции вертикальной табуляции \v
U + 000C Прогон страницы, смена страницы Выбрасывает текущую страницу и начинает печать со следующей \f
U + 0020 Пробел Интервал между буквами
U + 00A0 Неразрывный пробел Символ, отображающийся внутри строки подобно обычному пробелу, но не позволяющий разорвать в этом месте строку

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

Следующие символы распознаются интерпретаторами JavaScript как символы конца строки:

Точка с запятой

Программа (сценарий) на языке JavaScript представляет собой перечень «инструкций», которые выполняются веб-браузером.
В JavaScript инструкции, как правило, разделяются точкой с запятой (;).

Если несколько инструкций располагаются на одной строке, то между ними следует поставить знак "точка с запятой" (;).

Во многих случаях JavaScript интерпретирует переход на новую строчку как разделитель команд для автоматического ввода точек с запятой (ASI) для завершения инструкций.
Если каждая инструкция размещается на отдельной строке, то разделитель можно не писать:

Одна инструкция может располагаться на нескольких строчках:

В этом случае JavaScript ждёт завершение выражения и поэтому автоматически не вставляет «виртуальную» точку с запятой между строчками.

Примечание: Хотя точки с запятой в конце инструкций необязательны, рекомендуется всегда добавлять их. Сейчас это правило, которому следуют все большие проекты.

Это правило предотвращает некоторые ошибки, например незавершенный ввод, а также позволяет сжимать кoд за счет удаления пустых мест. Сжатие кода без точек с запятой приводит к синтаксическим ошибкам. Кроме того, наличие точек с запятой препятствует снижению быстродействия, потому что синтаксические анализаторы пытаются исправлять предполагаемые ошибки, добавляя недостающие точки с запятой.

Чувствительность к регистру

Для написания JavaScript-пpoгpaмм используется набор символов Unicode, который включает в себя наборы ASCII и Latin-1 и поддерживается практически всеми языками и платформами.
В JavaScript все элементы, включая имена переменных, функций и операторов, чувствительны к регистру и должны всегда содержать одинаковые наборы прописных и строчных букв. Например, ключевое слово while должно набираться как «while», а не «While» или «WHILE».

Аналогично num, NUM и Num – это три разные переменные:

Комментарии

Комментарии позволяют выделить фрагмент программы, который не выполняется интерпретатором JavaScript, а служит лишь для пояснений содержания программы.
Комментарии в JS могут быть однострочными и многострочными.

Однострочные комментарии начинаются с двойного слэша // . Текст считается комментарием до конца строки:

Многострочный комментарий начинается с слэша и звездочки (/*) , а заканчивается ими же в обратном порядке (*/) . Так можно закомментировать одну и более строк:

Совет: Не пренебрегайте комментариями в своих кодах. Они пригодятся вам при отладке и сопровождении программ. На этапе разработки бывает лучше закомментировать ненужный фрагмент программы, чем просто удалить. А вдруг его придется восстанавливать?

Идентификаторы

Идентификатор - это последовательность букв, цифр, символов подчёркивания (_) и знаков доллара ($) . Цифра не может быть первым символом идентификатора, т. к. тогда интерпретатору JavaScript труднее отличать идентификаторы от чисел. Идентификаторы выступают в качестве имён переменных, функций, свойств объекта и т. д.
Для совместимости и простоты редактирования для составления идентификаторов обычно используются только символы ASCII и цифры. Однако в ECMAScript v3 идентификаторы могут содержать буквы и цифры из полного набора символов Unicode. Это позволяет программистам давать переменным имена на своих родных языках и использовать в них математические символы:

Var имя = "Макс"; var Π = 3.14;

Исторически, программисты использовали разные способы объединения нескольких слов для записи идентификаторов. Сегодня есть два устоявшихся негласных стиля: camelCase и snake_case.
В JavaScript наиболее популярным стилем именования идентификаторов, состоящих из нескольких слов, является camelCase – "верблюжья" нотация. Это означает, что первая буква является строчной, а первые буквы всех последующих слов – прописными, например:

Var firstSecond; var myCar = "audi"; var doSomethingImportant;

Внимание: В JavaScript объединение нескольких слов для записи идентификаторов с применением дефисов запрещено. Они зарезервированы для математических вычитаний.

На заметку: В JavaScript ключевые слова, зарезервированные слова и значения true , false и null не могут быть идентификаторами.

Ключевые и зарезервированные слова

Стандарт ЕСМА-262 определяет набор ключевых слов (keywords), которые не могут использоваться в качестве идентификаторов. Зарезервированные слова имеют определенное значение в языке JavaScript, так как они являются частью синтаксиса языка. Использование зарезервированных слов приведет к ошибке компиляции при загрузке скрипта.

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

  • break
  • catch
  • class
  • const
  • continue
  • debugger
  • default
  • delete
  • export
  • extends
  • finally
  • function
  • import
  • instanceof
  • return
  • super
  • switch
  • throw
  • typeof
  • while
  • yield

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

Кроме того, ЕСМА-262 содержит набор зарезервированных слов (reserved words), которые также нельзя использовать как идентификаторы или имена свойств. За ними сейчас не стоит никакой функциональности, но она может появиться в будущих версиях:

  • await

В строгом (strict) режиме в этот список добавляются следующие слова:

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

Зарезервированные ключевые слова в версиях ECMAScript® от 1 по 3

  • abstract
  • boolean
  • double
  • final
  • float
  • native
  • short
  • synchronized
  • transient
  • volatile

В 5-й редакции ECMAScript немного изменены правила употребления ключевых и зарезервированных слов. Как и прежде они не могут быть идентификаторами, но теперь их допустимо использовать как имена свойств в объектах. Тем не менее, для обеспечения совместимости с прошлыми и будущими редакциями ECMAScript всё-же лучше не использовать ключевые и зарезервированные слова как идентификаторы и имена свойств.

Итоги

  • Интерпретатор JavaScript игнорирует все пробельные символы которые могут присутствовать между языковыми конструкциями и воспринимает текст программы как сплошной поток кода.
    Кроме того, JavaScript также, по большей части, игнорирует символы перевода строки. Поэтому пробелы и символы перевода строки могут без ограничений использоваться в исходных текстах программ для форматирования и придания им удобочитаемого внешнего вида.
  • Пропуск точек с запятой нельзя признать правильной практикой программирования, и поэтому желательно выработать привычку их использовать.
  • В JavaScript все элементы, включая имена переменных, функций и операторов, чувствительны к регистру и должны всегда содержать одинаковые наборы прописных и строчных букв.
  • Не пренебрегайте комментариями в своих кодах. Они пригодятся вам при отладке и сопровождении программ. Не переживайте насчет увеличения размера кода, т.к. существуют инструменты сжатия JavaScript, которые, при публикации, легко удалят комментарии.
  • Идентификаторы выступают в качестве имён переменных, функций, свойств объекта и состоят из последовательности букв, цифр, символов подчёркивания (_) и знаков доллара ($) .
  • Ключевые слова JavaScript, применяемые для обозначения элементов синтаксиса языка, а также другие слова, зарезервированные на будущее, нельзя использовать в качестве имен переменных, функций и объектов.

Синтаксис JavaScript

С 1995 года JavaScript прошел длинный путь от скромного компонента браузера Netscape до современных высокопроизводительных JIT-интерпретаторов. Казалось бы, всего лет пять назад разработчики были ошеломлены появлением Ajax, а уже сейчас сложные JavaScript-приложения достигли объемов в сотни и тысячи строк кода.

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

Если вы знаете другие языки программирования, вам может оказаться полезна информация, что JavaScript является высокоуровневым, динамическим, нетипизированным и интерпретируемым языком программирования, который хорошо подходит для программирования в объектно-ориентированном и функциональном стилях. Свой синтаксис JavaScript унаследовал из языка Java, свои первоклассные функции – из языка Scheme, а механизм наследования на основе прототипов – из языка Self. Но вам не требуется знать все эти языки или быть знакомыми с их терминологией для изучения JavaScript.

В этой статье мы рассмотрим базовые лексические структуры языка.

Символы

При написании программ на JavaScript используется набор символов Юникода. Юникод является надмножеством кодировок ASCII и Latin-1 и поддерживает практически все письменные языки, имеющиеся на планете. Стандарт ECMAScript 3 требует, чтобы реализации JavaScript обеспечивали поддержку стандарта Юникода версии 2.1 или выше, а стандарт ECMAScript 5 требует, чтобы реализации обеспечивали поддержку стандарта Юникода версии 3 или выше.

Чувствительность к регистру

JavaScript – это язык, чувствительный к регистру символов. Это значит, что ключевые слова, имена переменных и функций и любые другие идентификаторы языка должны всегда содержать одинаковые наборы прописных и строчных букв.

Например, ключевое слово while должно набираться как «while», а не «While » или «WHILE». Аналогично myvar, Myvar, MyVar и MYVAR – это имена четырех разных переменных. Заметим, однако, что язык разметки HTML (в отличие от XHTML) не чувствителен к регистру. Так как HTML и клиентский JavaScript тесно связаны, это различие может привести к путанице. Многие JavaScript-объекты и их свойства имеют те же имена, что и теги и атрибуты языка HTML, которые они обозначают. Однако если в HTML эти теги и атрибуты могут набираться в любом регистре, то в JavaScript они обычно должны набираться строчными буквами.

Например, атрибут onclick обработчика события чаще всего задается в HTML как onClick, однако в JavaScript-коде (или в XHTML-документе) он должен быть обозначен как onclick.

Пробелы, переводы строк и символы управления форматом

JavaScript игнорирует пробелы, которые могут присутствовать между лексемами в программе. Кроме того, JavaScript также по большей части игнорирует символы перевода строки. Поэтому пробелы и символы перевода строки могут без ограничений использоваться в исходных текстах программ для форматирования и придания им удобочитаемого внешнего вида.

Помимо обычного символа пробела (\u0020 ) JavaScript дополнительно распознает как пробельные следующие символы: табуляция (\u0009 ), вертикальная табуляция (\u000B ), перевод формата (\u000C ), неразрывный пробел (\u00A0 ), маркер порядка следования байтов (\uFEFF ), а также все символы Юникода, относящиеся к категории Zs.

Следующие символы распознаются интерпретаторами JavaScript как символы конца строки: перевод строки (\u000A ), возврат каретки (\u000D ), разделитель строк (\u2028 ) и разделитель абзацев (\u2029 ). Последовательность из символов возврата каретки и перевода строки интерпретируется как единственный символ завершения строки.

Символы Юникода, управляющие форматом (категория Cf), такие как RIGHT-TO-LEFT MARK (\u200F ) и LEFT-TO-RIGHT MARK (\u200E ), управляют визуальным представлением текста, в котором они присутствуют. Они имеют большое значение для корректного отображения текста на некоторых языках и являются допустимыми в комментариях JavaScript, строковых литералах и в литералах регулярных выражений, но не в идентификаторах (таких как имена переменных), определяемых в программах JavaScript. Исключение составляют ZERO WIDTH JOINER (\u200D ) и ZERO WIDTH NON-JOINER (\u200C ), которые можно использовать в идентификаторах при условии, что они не являются первыми символами идентификаторов.

Полную таблицу символов Unicode вы можете посмотреть на сайте Unicode Table .

Необязательные точки с запятой

Как и в других языках программирования, для отделения инструкций друг от друга в языке JavaScript используется точка с запятой (;). Использование точек с запятой имеет важное значение для ясного выражения намерений программиста: без этого разделителя по ошибке можно принять конец одной инструкции за начало следующей и наоборот.

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

Взгляните на следующий фрагмент. Поскольку две инструкции находятся в разных строках, первую точку с запятой можно опустить:

Однако если эти инструкции записать, как показано ниже, первая точка с запятой становится обязательной:

Комментарии

JavaScript поддерживает два способа оформления комментариев. Любой текст между символами // и концом строки рассматривается как комментарий и игнорируется JavaScript. Любой текст между символами /* и */ также рассматривается как комментарий. Эти комментарии могут состоять из нескольких строк, но не могут быть вложенными. Следующие строки представляют собой корректные JavaScript-комментарии:

// Это однострочный комментарий. /* Это тоже комментарий */ // а это другой комментарий. /* Это еще один комментарий. Он располагается в нескольких строках. */

Идентификаторы и зарезервированные слова

Идентификатор - это просто имя. В JavaScript идентификаторы выступают в качестве имен переменных и функций, а также меток некоторых циклов. Идентификаторы в JavaScript должны начинаться с буквы, с символа подчеркивания (_) или знака доллара ($) . Далее могут следовать любые буквы, цифры, символы подчеркивания или знаки доллара. (Цифра не может быть первым символом, так как тогда интерпретатору трудно будет отличать идентификаторы от чисел.) Примеры допустимых идентификаторов:

I my_variable_name v13 _myvar $str

Для совместимости и простоты редактирования для составления идентификаторов обычно используются только символы ASCII и цифры. Однако JavaScript допускает возможность использования в идентификаторах букв и цифр из полного набора символов Юникода. Это позволяет программистам давать переменным имена на своих родных языках и использовать в них математические символы:

Var имя = "Александр"; var Π = 3.14;

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

Зарезервированные ключевые слова JavaScript
Категория Ключевые слова
Базовые идентификаторы break delete function return typeof
case do if switch var
catch else in this void
continue false instanceof throw while
debugger finally new true with
default for null try
Новые ключевые слова в стандарте EcmaScript 5 class const enum export
extends import super
Зарезервированные слова в строгом режиме (в обычном они доступны) implements let private public yield
interface package protected static

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

Иногда точку с запятой можно упустить и это сойдет с рук, но не всегда. Поэтому в том случае, когда подразумевается конец предложения, лучше не забыть ее ставить.

Если вы по невнимательности пропускаете точку с запятой, пробелы, ну или по другой причине ваш код не имеет стиль (а это важно!), то советую ESLint .

Предложения состоят из:

  • Значений
  • Операторов
  • Выражений
  • Ключевых слов
  • Комментариев

В JavaScript существует два типа значений: переменные и литералы.

Переменные

Переменные используются для хранения значений. Для объявления переменных в JavaScript используется ключевое слово var .
Переменные мы можем объявить тремя вариантами:

  • С помощью ключевого слова var. Например, var y = 56;
  • Просто присвоив значение. Например, y = 56;
    Но этот вариант нежелателен, так как в таком случае переменная становится глобальной.
    Почему глобальная переменная – это плохо? Хотя бы потому, что становясь глобальной она выходит из-под контроля области действия функции. Она может быть как изменена другим кодом, так и сама переписать значение в чужом коде
  • С помощью ключевого слова let.
    Т.к. в JavaScript (до ECMAScript 6) не существует область видимость в пределах блока, то ввели let, позволяющее объявить переменные с областью видимости – блок.
    Например, if (true) {let y = 4;} console.log(y); // ReferenceError: y is not defined

    Посмотреть текущую поддержку ES6 можно .

Литералы

Литералы — фиксированные значения. К ним относятся такие типы данных как null, Boolean, Number, Object, String.
Например, когда мы объявляем массив, то часть, которая идет после знака равно является литералом массива.

Var food = [‘cheese’,’potates’,’cucumber’];

А food — это переменная.

Числа

Числа записываются как с десятичными знаками, так и без них.

10.50 1001

Для того, чтобы интерпретатор понял, что означает точка – вызов метода или плавающую точку, нам нужно ему подсказать, одним из способов:

1..toString() 1 .toString() // пробел перед точкой (1).toString() 1.0.toString()

Строка (String)

String — текст, написанный с помощью двойных или одинарных кавычек.

"I am string“ "And I am string‘

По-хорошему, вам надо определить какие кавычки использовать и следовать своему выбору во время написания кода.

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

Идентификаторы

Название, которое мы дает переменным, функциями, свойствам называется идентификатором.
Он может содержать только буквенно-цифровые символы, «$» и «_».
Чем идентификатор отличается от String?

String – данные, а идентификатор часть кода.

Var surname = “Smit”;

“Smit” однозначно данные — литерал строки, тогда как surname – хранилище для этого значения.
Обратите внимание, что дефис в идентификаторе не допускается, так как он используется для вычитания.

Выражения

Выражение — комбинация значений, переменных, операторов, которая вычисляет значение.
Например выражение, 3 * 5 вычисляет 15.
Выражение может содержать и переменную
x * 4
Конечно, значения могут быть и строкой.
Например выражение:

"The day" + " is " + "sunny" //вычисляется в строку "The day is sunny".

Выражения можно разделить на те, что присваивают значение переменной и на те которые просто вычисляют значения.
Первый случай:

а второй:

Кстати, стоит нам добавить точку с запятой и у нас уже не выражение, а предложение!

Var x = 56;

Запятая для выражений

Запятая вычисляет оба операнда и возвращает правое значение.

Var x = 0; var y = (x++, 4); console.log(x); //1 console.log(y); //4

Выражения вычисляют значение и могут быть написаны везде, где значение ожидается. Например, аргумент в вызове функции или правая часть присваивания.

Каждая из следующих строк содержит выражение:

X x + 6 changeArray("a","b")

Везде где js ожидает предложение, вы можете также писать и выражения.
Подобное предложение называется инструкция-выражение.

Но вы не можете писать предложение, где js предполагает выражение. Например IF предложение не может стать аргументом функции.

Сравнение предложения и выражения

Взглянем на IF предложение и на условный оператор, который является выражением.

Var result; if (x > 0) { result = "Положительное число"; } else { result = "Отрицательное число"; }

Эквивалентно:

Var result = (x > 0 ? "Положительное число" : "Отрицательное число");

Между знаком = и ; выражение.
Для того, чтобы предотвратить двусмысленность при синтаксическом разборе, JS не позволяет использовать литералы объекта и выражения функций как предложения.

Из этого следует, что предложения-выражения не должны начинаться с:

  • фигурных скобок
  • с ключевого слова function

Если выражение начинается с того либо с другого, то следует его писать в контексте выражения.
Для этого выражение помещается скобки.

Функция-объявление и функция-выражение

Допустим, мы хотим объявить анонимную функцию-выражение, тогда пишем так:

(function(){return "ready!")());

Давайте рассмотрим, чем эта функция будет отличаться от функции-объявления вида

Function getReady() { return "ready!" }

  • Очевидно, что у анонимной нет имени. Но оно вполне может быть, тогда это будет именованная функция-выражение.
  • Функция-объявление создается интерпретатором до выполнения кода, функция-выражение же только по время выполнения.
  • Следовательно функции-выражения не доступны до их объявления.

А если мы запишем так?

GetReady(); var getReady = function(){ return "ready!"; } getReady();

В первой строчке получим ошибку: TypeError: getReady is not a function
Пятая же выведет нам «ready», так как функция была уже объявлена.
Это явление называется всплытием (hoisting), почему оно происходит описано в посте про .

Обучаясь письменной речи, человек обязательно изучает основы правописания, грамматику и орфографию. К примеру, все знают, что предложение начинается с заглавной буквы и заканчивается точкой, текст делится на абзацы и т. п.

Аналогичным образом действуют и языки программирования: чтобы программа работала, следует придерживаться определенных правил. Набор правил, определяющий структуру языков программирования, называется синтаксисом. Многие языки программирования строятся на одинаковых концепциях, но используют разный синтаксис.

Данный мануал ознакомит вас с основами синтаксиса и структурирования кода в JavaScript.

Функциональность и удобочитаемость

Функциональность и удобочитаемость – очень важные аспекты синтаксиса JavaScript, на которых нужно сосредоточиться отдельно.

Некоторые правила синтаксиса являются обязательными для кода JavaScript. Если они не соблюдаются, консоль выдаст ошибку, и сценарий прекратит работу.

Рассмотрим такую ошибку в программе «Hello, World!».

// Example of a broken JavaScript program
console.log("Hello, World!"

В конце не хватает закрывающей скобки, потому вместо строки «Hello, World!» программа вернет ошибку:

Uncaught SyntaxError: missing) after argument list

Чтобы сценарий мог продолжить работу, нужно добавить закрывающую круглую скобку. Вот так ошибка в синтаксисе JavaScript может повлиять на работу программы.

Некоторые аспекты синтаксиса и форматирования JavaScript основаны на разных точках зрения. Проще говоря, существуют стилистические правила и варианты, которые не являются обязательными и не приводят к ошибкам при запуске кода. Тем не менее, существует также много общих соглашений и конвенций, которые разумно отслеживать – так разработчики проектов и кода будут иметь все необходимые знания об обновлениях стиля и синтаксиса. Соблюдение общих конвенций повысит удобочитаемость кода.

Рассмотрим следующие три варианта присвоения значения переменной:

const greeting="Hello"; // no whitespace between variable & string
const greeting = "Hello"; // excessive whitespace after assignment
const greeting = "Hello"; // single whitespace between variable & string

Все три приведенные выше строки будут работать одинаково. Но третий вариант (greeting = «Hello») на сегодняшний день является наиболее часто используемым и удобочитаемым способом написания кода, особенно при рассмотрении его в контексте более объемной программы.

Очень важно следить за целостностью и последовательностью всего кода программы.

Ниже мы рассмотрим несколько примеров, чтобы ознакомиться с синтаксисом и структурой кода JavaScript.

Пробельные символы

Пробельные символы JavaScript – это пробелы, табы и перевод строки (это действие выполняет клавиша Enter). Как было показано ранее, избыточные пробелы вне строки, пробелы между операторами и другими символами игнорируются интерпретатором JavaScript. Это означает, что следующие три примера присвоения переменной будут иметь одинаковый результат:

const userLocation = "New York City, " + "NY";
const userLocation="New York City, "+"NY";
const userLocation = "New York City, " + "NY";

Переменная userLocation будет иметь значение «New York City, NY» вне зависимости от стиля присвоения этого значения. Для JavaScript не имеет никакого значения, какие пробельные символы используются.

В написании программ есть одно проверенное и надежное правило: расставляя пробельные символы, следуйте тем же правилам, которыми вы пользуетесь в математике или грамматике. К примеру, строка:

читается проще, чем:

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

const companyName = "MyCompany";
const companyHeadquarters = "New York City";
const companyHandle = "mycompany";

Все операторы присваивания (=) выравниваются в одну линию с помощью пробелов. Этот тип структуры не используется всеми базами кода, но может повысить удобочитаемость.

Лишние переходы строки тоже игнорируются в JavaScript. Как правило, дополнительные пустые строки вставляются над комментарием и после блока кода.

Круглые скобки

В ключевых словах, таких как if, switch и for, до и после круглых скобок обычно добавляются пробелы. Рассмотрите следующий пример:

// An example of if statement syntax
if () { }
// Check math equation and print a string to the console
if (4 < 5) {
console.log("4 is less than 5.");
}
// An example of for loop syntax
for () { }
// Iterate 10 times, printing out each iteration number to the console
for (let i = 0; i <= 10; i++) {
console.log(i);
}

Как видите, круглые скобки оператора if и цикла выделены пробелами с двух сторон.

Когда код относится к функции, методу или классу, скобки пишутся рядом с именем без пробела.

// An example function
function functionName() {}
// Initialize a function to calculate the volume of a cube
function cube(number) {
return Math.pow(number, 3);
}
// Invoke the function
cube(5);

В приведенном выше примере cube() является функцией, а скобки () будут содержать параметры или аргументы. В этом случае параметры выражены с помощью number или 5. Написание cube () с пробелом тоже будет работать, но оно почти никогда не используется. Слитное написание функции и скобок помогает легко связать функцию с ее аргументами.

Точка с запятой

Так же, как абзацы текста состоят из предложений, программы JavaScript состоят из ряда инструкций, которые называются выражениями. В конце предложения ставится точка, а в конце выражения JavaScript – точка с запятой (;).

// A single JavaScript statement
const now = new Date();

Если два или более выражения расположены рядом друг с другом, их необходимо разделить точкой с запятой.

// Get the current timestamp and print it to the console
const now = new Date(); console.log(now);

Если выражения разделены символом новой строки, точку с запятой ставить необязательно.

// Two statements separated by newlines
const now = new Date()
console.log(now)

По общему соглашению точку с запятой принято ставить после выражения независимо от символов новых строк. Это снижает вероятность ошибок.

// Two statements separated by newlines and semicolons
const now = new Date();
console.log(now);

Точку с запятой также ставят между инициализацией и условием в циклах for:

for (initialization; condition; increment) {
// run the loop
}

Точка с запятой не ставится после операторов if, for, do, while, class, switch и function. Эти операторы берутся в фигурные скобки {}. Рассмотрите следующий код:

// Initialize a function to calculate the area of a square
function square(number) {
return Math.pow(number, 2);
}
// Calculate the area of a number greater than 0
if (number > 0) {
square(number);
}

Будьте осторожны, так как не весь код, заключенный в фигурные скобки, не требует точки с запятой. Объекты берутся в фигурные скобки и должны заканчиваться точкой с запятой.

// An example object
const objectName = {};
// Initialize triangle object
const triangle = {
type: "right",
angle: 90,
sides: 3,
};

Широко распространена практика, при которой точки с запятой ставятся после каждого оператора и выражения JavaScript, кроме тех, которые заканчиваются фигурными скобками.

Структурирование кода

Технически весь код программы JavaScript можно поместить в одну строку. Но такой код очень сложно читать и поддерживать. Потому программа делится на строки.

К примеру, оператор if/else можно написать в одну строку, а можно разделить:

// Conditional statement written on one line
if (x === 1) { /* execute code if true */ } else { /* execute code if false */ }
// Conditional statement with indentation
if (x === 1) {
// execute code if true
} else {
// execute code if false
}

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

Открытая скобка в конце первой строки – обычный способ структурирования операторов и объектов JavaScript. Иногда скобки выносятся в отдельные строки:

// Conditional statement with braces on newlines
if (x === 1)
{
// execute code if true
}
else
{
// execute code if false
}

Такая структура в JavaScript, как и в других языках, используется довольно редко.

Вложенные операторы должны отделяться:

// Initialize a function
function isEqualToOne(x) {
// Check if x is equal to one
if (x === 1) {
// on success, return true
return true;
} else {
return false;
}
}

Правильная установка отступов делает код удобочитаемым. Единственное исключение из этого правила, которое следует иметь в виду, заключается в том, что сжатые библиотеки удаляют все ненужные символы, чтобы уменьшить объем файла.

Идентификаторы

Имена переменных, функций или свойств в JavaScript называются идентификаторами. Идентификаторы состоят из букв и цифр, но они не могут содержать символы за пределами $ и _ и не могут начинаться с числа.

Чувствительность к регистру

Имена чувствительны к регистру. То есть, myVariable и myvariable будут восприниматься как две разные переменные.

var myVariable = 1;
var myvariable = 2;

По общему соглашению имена пишутся в верблюжьем регистре (camelCase): первое слово пишется со строчной буквы, но каждое последующее слово начинается с заглавной буквы. Глобальные переменные или константы пишутся в верхнем регистре и разделяются символами подчеркивания.

const INSURANCE_RATE = 0.4;

Исключением из этого правила являются имена классов, в которых обычно каждое слово начинается с заглавной буквы (PascalCase).

// Initialize a class
class ExampleClass {
constructor() { }
}

Чтобы обеспечить читаемость кода, нужно последовательно использовать идентификаторы во всех файлах программы.

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

Идентификаторы также не должны содержать никаких зарезервированных ключевых слов. Ключевые слова – это слова JavaScript, которые имеют встроенную функциональность. К ним относятся var, if, for и this.

К примеру, вы не сможете присвоить значение переменной с именем var.

var var = "Some value";

JavaScript знает ключевое слово var, потому выдаст ошибку:

SyntaxError: Unexpected token (1:4)

Программа на JavaScript состоит из переменных, операторов, функций, объектов и других конструкций языка. Все они будут подробно рассмотрены в данном учебнике. А в этой теме я расскажу, как они пишутся в коде программы. Синтаксис JavaScript обыкновенный и во многом совпадает с другими языками прораммирования.

Пробелы и перевод строки

JavaScript не требует присутсвия пробелов между переменными и различными орераторами. Но позволяет ставить пробелы там, где Вам нужно:

Перевод строки тоже можно производить там, где Вам удобно. Есть одно исключение: нельзя делать перевод строки внутри текста, находящегося в кавычках. Подробнее этот вопрос будет рассмотрен при изучении строк. В остальных случаях Вы сами решаете, где переводить строку

Можно написать так:

Однако, я рекомендую ставить точку с запятой после каждого оператора и вызова функции. Во-первых, отсутствие точки с запятой допустимо не всегда, и может возникнуть ошибка. Во-вторых, это распространённый стиль грамотного написания кода, и лучше сразу к нему привыкать. Желательно соблюдать правило: каждая строка должна заканчиваться точкой с запятой. Исключение составляют конструкции языка, для которых предусмотрены свои знаки. Например, некоторые операторы.

При написании своих названий, например, при создании переменных, тоже учитывается регистр символов. company и Company - это две разные переменные.