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

ЛИТЕРАЛЫ И КОНСТАНТЫ

НЕКОТОРЫЕ ЗАРЕЗЕРВИРОВАННЫЕ СЛОВА

ССЫЛКИ НА ПЕРЕМЕННЫЕ

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

Литералы объектов и массивов это выражения-инициализаторы, значениями которых являются вновь созданные объекты и массивы. Инициализаторы, в отличии от простейших выражений, относятся к сложным, так как включают подвыражения, вычисляющие значения свойств и элементов.

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

Имена свойств в литералах объектов помимо идентификаторов могут содержать строки:

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

выражение.идентификатор
выражение[выражение]

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

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

Выражение, которое находится перед . или [, вычисляется первым вне зависимости от способов обращения к свойству. В случае, когда значение такого выражения null либо undefined, интерпретатор возбуждает исключение TypeError. Это связано с тем, что у подобных значений нет свойств.

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

Выражения определений функций

Выражения определений функций, как можно догадаться из названия, осуществляют определение функции. Значение такого выражения — это заново созданная функция. Выражение определения функции включает в себя ключевой слово function, а также список идентификаторов в качестве имен параметров, разделенных запятыми. Данный список идентификаторов размещается в круглых скобках, за которым следует блок с кодом javascript, помещенный в фигурные скобки и являющийся телом функции.

Возможен способ определения функций при помощи инструкции function, которая станет аналогом выражения определения функции. Такие понятия, как «функция-объявление» и «функция-выражение», практически равнозначны, однако, между ними существует одно значимое отличие, которое напрямую связано с обработкой данных интерпретатором javascript. Объявления функций считываются и становятся доступными в контексте исполнения еще до процесса интерпретации кода javascript, а в случае функций-выражений, считывание происходит лишь после достижения их интерпретатором. Сравните:

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

Выражения вызова

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

В момент вычисления выражения вызова, сперва вычисляется выражение, которое возвращает функцию, а уже за ним следуют вычисления выражений аргументов и создание списка значений аргументов. В случае, когда значение выражения, производящего возврат функции, не вызываемый объект — возникнет исключение TypeError. Стоит отметить, что каждая функция javascript, является вызываемым объектом, кроме того, вызываемыми могут быть и объекты среды выполнения, даже если они не представляют из себя функции. Значения аргументов будут присваиваться по порядку их следования именам параметров, указанных в определении функции, затем будет выполнено само тело функции. В случаях, когда внутри функции javascript, использована инструкция return, которая возвращает некоторое значение, оно станет значением именно выражения вызова. В обратном случае, выражение вызова будет возвращать значение undefined.

Выражения создания объектов (конструкторов)

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

В момент вычисления выражения создания объекта, интерпретатором javascript создается новый условно-пустой объект, словно для создания применяется пустой инициализатор объекта {}. После интерпретатор вызsвает указанную функцию со всеми указанными аргументами. Функция получает новый объект javascript, в роли значения ключевого слова this. Функция может применять его в целях инициализации свойств вновь созданного объекта. Функции, создаваемые в роли конструктора, не должны возвращать значение. Иначе, созданный объект, прошедший инициализацию, станет значением выражения создания объекта. Когда конструктор возвращает любой объект, данный объект становится значением полного выражения создания объекта. При этом, интерпретатор уничтожает вновь созданный объект.

Иные выражения в JavaScript

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