JavaScript. Подробное руководство, 6-е издание, стр. 32
Наиболее типичный способ конструирования сложных выражений из более простых выражений заключается в использовании операторов. Операторы объединяют значения своих операндов (обычно двух) некоторым способом и вычисляют новое значение. Простейшим примером может служить оператор умножения *. Выражение
<b>х * у</b>Эта глава описывает все операторы JavaScript, а также выражения (такие как индексирование массивов и вызов функций), в которых не используются операторы. Те, кто знаком с другими языками программирования, использующими С-подобный синтаксис, заметят, что в JavaScript выражения и операторы имеют похожий синтаксис.
4.1. Первичные выражения
Простейшие выражения, известные как первичные выражения, являются самостоятельными выражениями - они не включают более простых выражений.
Первичными выражениями в языке JavaScript являются константы, или литералы, некоторые ключевые слова и ссылки на переменные.
Литералы и константы встраиваются непосредственно в программный код. Они выглядят, как показано ниже:
<b>1.23 // Числовой литерал</b><b>"hello" // Строковый литерал</b><b>/pattern/ // Литерал регулярного выражения</b>Синтаксис числовых литералов в JavaScript был описан в разделе 3.1.0 строковых литералах рассказывалось в разделе 3.2. Синтаксис литералов регулярных выражений был представлен в разделе 3.2.4 и подробно будет описываться в главе 10.
Ниже приводятся некоторые из зарезервированных слов JavaScript, являющихся первичными выражениями:
<b>true // Возвращает логическое значение true</b><b>false // Возвращает логическое значение false</b><b>null // Возвращает значение null</b><b>this // Возвращает "текущий" объект</b>Мы познакомились со значениями
<b>true, false и null</b><b>this</b><b>this</b><b>this</b><b>this</b>Наконец, третьим типом первичных выражений являются ссылки на переменные:
<b>і // Возвращает значение переменной і</b><b>sum // Возвращает значение переменной sum</b><b>undefined // undefined - глобальная переменная, а не ключевое слово, как null</b>Когда в программе встречается идентификатор, интерпретатор JavaScript предполагает, что это имя переменной и пытается отыскать ее значение. Если переменной с таким именем не существует, возвращается значение
<b>undefined</b>4.2. Инициализаторы объектов и массивов
Инициализаторы объектов и массивов - это выражения, значениями которых являются вновь созданные объекты и массивы. Эти выражения-инициализаторы иногда называют «литералами объектов» и «литералами массивов». Однако, в отличие от истинных литералов, они не являются первичными выражениями, потому что включают множество подвыражений, определяющих значения свойств и элементов. Инициализаторы массивов имеют более простой синтаксис, поэтому мы рассмотрим их в первую очередь.
Инициализатор массива - это список выражений, разделенных запятыми, заключенный в квадратные скобки. Значением инициализатора массива является вновь созданный массив. Элементы этого нового массива инициализируются значениями выражений из списка:
<b>[] // Пустой массив: отсутствие выражений в квадратных скобках</b><b> // означает отсутствие элементов</b><b>[1+2,3+4] // Массив из 2 элементов. Первый элемент - 3, второй - 7</b>Выражения в инициализаторе массива, определяющие значения его элементов, сами могут быть инициализаторами массивов, благодаря чему имеется возможность создавать вложенные массивы:
<b>var matrix = [[1,2,3], [4,5,6], [7,8,9]];</b>Выражения в инициализаторе массива, определяющие значения его элементов, вычисляются всякий раз, когда вычисляется значение инициализатора. Это означает, что значение выражения инициализатора массива может отличаться при каждом последующем его вычислении.
В литерал массива допускается включать неопределенные элементы, для чего достаточно опустить значение между запятыми. Например, следующий массив содержит пять элементов, включая три элемента с неопределенными значениями:
<b>var sparseArray = [1,,,,5];</b>После последнего выражения в инициализаторах массивов допускается указывать завершающую запятую, при этом последний элемент с неопределенным значением создаваться не будет.
Выражения-инициализаторы объектов похожи на выражения-инициализаторы массивов, но вместо квадратных скобок в них используются фигурные скобки, а каждое подвыражение предваряется именем свойства и двоеточием:
<b>var р = { х:2.3, у:-1.2 }; // Объект с 2 свойствами</b><b>var q = {}; // Пустой объект без свойств</b><b>q.x = 2.3; q.y = -1.2; // Теперь q имеет те же свойства, что и р</b>Литералы объектов могут быть вложенными. Например:
<b>var rectangle = { upperLeft: { х: 2, у: 2 },</b><b>lowerRight: { х: 4, у: 5 } };</b>Выражения внутри инициализаторов объектов вычисляются всякий раз, когда вычисляется значение самого инициализатора, и не обязательно должны быть константами: они могут быть произвольными выражениями JavaScript. Кроме того, имена свойств в литералах объектов могут быть строками, а не идентификаторами (это удобно, когда возникает желание дать свойствам имена, совпадающие с зарезервированными словами, которые иначе не могут использоваться в качестве идентификаторов):