Приложение 1. Элементы языка JavaScript Таблица 10-1. Зарезервированные ключевые слова JavaScript Таблица 10-2. Унарные операторы Таблица 10-2. Бинарные операторы Таблица 10-3. Операторы для выполнения логических операций Таблица 10-4. Операторы сдвига Таблица 10-5. Операторы отношения Таблица 10-6. Логические операторы Таблица 10-7. Комбинации оператора присваивания и других операторов Таблица 10-8. Прочие операторы Таблица 10-9. Таблица старшинства операторов JavaScript Таблица 10-10. Встроенные объекты JavaScript Таблица 10-11. Параметры конструктора Date
Это приложение содержит краткую справочную информацию по языку сценариев JavaScript. Она пригодится Вам при составлении как клиентских, так и серверных сценариев. В сценариях JavaScript Вы можете использовать переменные, адресуясь к ним по имени. Переменные бывают как глобальные, так и локальные. Первые доступны из любого места сценария. Область действия локальных переменных ограничивается функцией, внутри которой эти переменные объявлены. Так же как и в языке программирования Basic, при составлении сценариев JavaScript допустимо использовать переменные без их предварительного объявления. Исключение из этого правила — локальные переменные, определенные в функциях. Все переменные в JavaScript объявляются с помощью ключевого слова var, как это показано ниже: var szHelloMsg; При объявлении тип переменной не указывается. Он присваивается переменной только тогда, когда в нее записывается какое-либо значение. При выборе имен переменных следует придерживаться следующих правил: · имя переменной должно начинаться с буквы или с символов «_», «$» и может состоять только из букв, цифр, а также символов «_», «$»; · имя переменной не должно совпадать с зарезервированными ключевыми словами JavaScript. Список зарезервированных ключевых слов JavaScript приведен в таблице 10-1. Таблица 10-1. Зарезервированные ключевые слова JavaScript
Присвоение значения переменным Вы можете присвоить значение переменной при помощи оператора присвоения «=». Например, ниже мы объявляем переменную и затем записываем в нее текстовую строку: var szHelloMsg; В любом месте программы мы можем присвоить переменной szHelloMsg численное значение, например, так: szHelloMsg = 4; После выполнения такой операции тип переменной изменится, причем в процессе интерпретации сценария браузер не отобразит никаких предупреждающих сообщений. Вы вправе присвоить переменной специальное значение null: szHelloMsg = null; Такое присвоение не назначает переменной никакого типа. Оно применяется в тех случаях, когда Вам нужно объявить переменную и проинициализировать ее, не присваивая этой переменной никакого начального значения и типа. В частности, в только что приведенном примере переменной szHelloMsg не присваивается ни численное значение 0, ни пустая текстовая строка. Хотя при создании переменной Вы не можете присвоить ей тип, в языке JavaScript все же существует несколько типов данных. Это числа, текстовые строки, логические данные, объекты, данные неопределенного типа, а также специальный тип null. Язык сценариев JavaScript допускает использование чисел в различных форматах: целые числа, числа в формате с плавающей десятичной точкой и числа в научной нотации. Целые числа могут быть представлены по основанию 8, 10 или 16. В некоторых случаях арифметические функции возвращают так называемое «нечисло», которое в JavaScript называется NaN (Not a Number). «Нечисло» — это специальное значение, которое не соответствует никакому числу. Оно генерируется в тех случаях, когда результат выполнения операции над числами не может быть представлен в виде числа. Средства функции isNaN позволят Вам проверить, является ли значение «нечислом». Текстовые строки — это последовательность символов Unicode, заключенных в одинарные или двойные кавычки, например: “Hello, world!” Строка “” — пустая. Заметим, что следующие два присвоения не эквивалентны: szStr=”” В первом случае в переменной szStr хранится текстовая строка (хотя бы и пустая), во втором — совсем ничего. Логические данные имеют только два значения: true и false. Эти значения никак не соотносятся с числами 1 и 0. Они предназначены главным образом для выполнения операций сравнения, а также для использования в условных операторах. Если переменная была объявлена, но ей еще ни разу не присваивалось значение, она имеет неопределенный тип. Например, в следующей строке сценария объявлена переменная MyVariable, которая имеет неопределенный тип: var MyVariable; Если же этой переменной присвоить значение null, то тип переменной изменится — теперь она будет содержать значение null: MyVariable = null; Когда в выражениях встречаются переменные разных типов, интерпретатор JavaScript автоматически преобразует численные данные в текстовые строки. Обратное же преобразование (строк в числа) приходится выполнять с помощью специальных функций — parseInt и parseFloat. Рассмотрим следующий сценарий: var szTextBuf = ""; Здесь мы объявили переменную szTextBuf и проинициализировали ее пустой строкой. Далее мы присвоили этой строке сумму числа 4 и двух текстовых строк: szTextBuf = 4 + " - число четыре" + "<BR>"; При вычислении этого выражения значение 4 автоматически преобразуется в текстовую строку. Дальнейшее суммирование выполняется как слияние (конкатенация) трех текстовых строк. Обратите внимание на символ неразделяющего пробела , который используется в документах HTML. Если заменить его обычным пробелом, то после конкатенации строк этот пробел исчезнет. В следующей строке мы преобразуем текстовую строку «2» в численное значение с помощью функции parseInt, прибавляем к результату преобразования число 2, а затем выполняем конкатенацию с двумя текстовыми строками: szBuf2 = (parseInt("2")+2)+" - число четыре "+ "<BR>"; В результате переменная szBuf2 будет содержать ту же самую строку, что и переменная szTextBuf. Операторы языка сценариев JavaScript напоминают общеизвестные операторы языка C. Они применяются для изменения знака, выполнения операции дополнения, инкремента и декремента (таблица 10-2). Таблица 10-2. Унарные операторы
Бинарные операторы соединяют два операнда. В языке сценариев JavaScript предусмотрены бинарные операторы для вычитания, сложения, умножения, деления и вычисления остатка деления (таблица 10-3). Таблица 10-2. Бинарные операторы
Операторы для выполнения логических операций В своих сценариях Вы можете применять операторы, выполняющие над битами переменных такие логические операции, как «И», «ИЛИ», «ИСКЛЮЧАЮЩЕЕ ИЛИ», «НЕ» (таблица 10-4). Данные операторы перед выполнением своих функций преобразуют значения переменных в 32-разрядные целые числа. Таблица 10-3. Операторы для выполнения логических операций
Для выполнения операций сдвига в языке JavaScript предусмотрено три оператора (таблица 10-4). Таблица 10-4. Операторы сдвига
Перед использованием операторов сдвига значение переменной преобразуется в 32-разрядное целое число. Операторы отношения используются для сравнения значений переменных (таблица 10-5). Они возвращают логические значения true или false в зависимости от результата сравнения и применяются главным образом в условных операторах. Таблица 10-5. Операторы отношения
В условных операторах также часто применяются логические операторы (таблица 10-6). Таблица 10-6. Логические операторы
Оператор присваивания задает значения переменным. В языке сценариев JavaScript, так же как и в языке программирования С, допускается комбинирование этого оператора с другими для изменения содержимого переменных. В таблице 10-7 мы перечислили все возможные комбинации оператора присваивания и других операторов. Таблица 10-7. Комбинации оператора присваивания и других операторов
Любой язык программирования бесполезен, если в нем не предусмотрены те или иные средства ветвления при выполнении программы. В языке JavaScript имеется условный оператор else-if, который позволяет выполнять разные программные строки в зависимости от условия. Общий вид оператора else-if показан ниже: if(условие) Часть оператора, выделенная квадратными скобками, является необязательной. При выполнении этого оператора оценивается условие, заданное в круглых скобках после ключевого слова if. Если в результате оценки условия получилось логическое значение true, выполняется строка 1. Если же получилось значение false, то выполняется строка 2 (в том случае, когда она присутствует). Оператор if-else может быть вложенным. Учтите, что если в строке 1 или 2 необходимо расположить несколько операторов, их следует выделить фигурными скобками. Существует также специальный тип условного оператора, который называется оператором ?:. В общем виде он записывается так: выражение ? строка 1 : строка 2 При вычислении оператора ?: вначале оценивается логическое выражение, расположенное в левой части. Если оно равно true, выполняется строка 1, а если false — строка 2. В языке JavaScript несколько операторов предназначены для организации циклов. Оператор for Общий вид оператора for показан ниже: for([инициализация;] [условие;] [итерация]) В области инициализации обычно выполняется присваивание начальных значений переменным цикла. Здесь допустимо объявление новых переменных при помощи ключевого слова var. Вторая область задает условие выхода из цикла. Это условие оценивается каждый раз при прохождении цикла. Если в результате оценки получается логическое значение true, выполняются строки тела цикла. Область итерации применяется для изменения значений переменных цикла, например для уменьшения счетчика цикла. Оператор for-in Оператор for-in предназначен для просмотра всех свойств объекта и записывается в следующем виде: for(переменная in объект) Оператор while Для организации циклов с проверкой условия их завершения перед выполнением итерации используется оператор while: while(условие) Если в результате оценки условия получается значение true, тогда итерация выполняется, если false — цикл прерывается. Оператор break С помощью оператора break можно прервать выполнение цикла, созданного операторами for или while, в любом месте. Например: var i = 0; Оператор continue Выполнение оператора continue внутри цикла for или while приводит к тому, что итерация прерывается, а затем возобновляется заново. Этот оператор не прерывает цикл. Ниже мы приводим пример использования оператора continue: var i = 0; Здесь фрагмент тела цикла, отмеченный многоточием, будет выполняться только после того, как значение переменной i станет равным 10. Когда же это значение достигнет 100, цикл завершится. Среди прочих операторов языка сценариев JavaScript мы рассмотрим оператор доступа к полю, индексирование массива, скобки и запятую (таблица 10-8). Таблица 10-8. Прочие операторы
Первый из этих операторов применяется для вызова методов, определенных в объектах, а также для доступа к полям объектов, или, как их еще называют, к свойствам объектов. Ниже, например, мы вызвали метод write, определенный в объекте document: document.write("Hello, world!"); Квадратные скобки используются для индексации массивов аналогично тому, как это делается в других языках программирования. Что касается круглых скобок, то они применяются либо для изменения порядка вычисления выражений, либо для передачи параметров функциям. Оператор запятая предназначен для разделения выражений, которые надо оценивать последовательно. Этот прием называется многократным вычислением. Например, в фрагменте исходного текста, показанном ниже, на каждой итерации цикла выполняется увеличение содержимого переменных i и nCycleCount: var i; Старшинство операторов JavaScript В таблице старшинства операторов JavaScript показан порядок вычисления составных операторов. Не забудьте, что все логические операции выполняются слева направо. Первыми вычисляются операторы, расположенные в начале таблицы старшинства. Таблица 10-9. Таблица старшинства операторов JavaScript
Вы можете оформить фрагменты исходного текста в виде функции, вызывая эту функцию по мере необходимости из различных мест сценария JavaScript. Для клиентских сценариев функции обычно определяются в разделе заголовка документа HTML, отмеченного тегами <HEAD> и </HEAD>. Как мы уже говорили, функцию надо определить перед вызовом. Размещение всех определений функций в разделе заголовка документа HTML гарантирует доступность этих функций при обработке документа. В серверных сценариях ASP функции необходимо определить до их использования. Общий вид определения функции показан ниже: function имя([параметр 1] [,параметр 2] [...,параметр
N]) Все параметры передаются функции по значению. Поэтому функция не может изменить содержимое переменных, передаваемых ей в качестве параметров. Ключевое слово return позволяет функции вернуть значение. В таблице 10-10 мы перечислили встроенные объекты, свойства и методы которых доступны в сценариях JavaScript без предварительного определения этих объектов. Таблица 10-10. Встроенные объекты JavaScript
Встроенные объекты очень удобны для выполнения различных операций со строками, календарными датами, массивами, числами и т. д. Они освобождают программиста от выполнения рутинных операций вроде преобразования строк или вычисления математических функций. Как работать со встроенными объектами? Это достаточно просто. Программа создает объекты, а затем обращается к их свойствам и методам. В качестве примера, имеющего практическое значение, рассмотрим фрагмент сценария, расположенного в документе HTML, в котором отображается текущая дата и время: var dt; Здесь сценарий JavaScript создает объект Data, применяя для этого ключевое слово new, знакомое всем поклонникам языка С++, и конструктор Date без параметров: var dt; Создаваемый таким образом объект Data инициализируется текущей локальной датой, установленной на компьютере пользователя (а не на сервере Web, с которого был загружен соответствующий документ HTML). Если же расположить данный фрагмент кода в серверном сценарии ASP, то объект Data, напротив, инициализируется датой, установленной на сервере. В следующей строке формируется текстовая строка даты: szDate = "Date: " +
dt.getDate() + "." Значение календарного числа, номера месяца и года здесь получается при помощи методов getDate, getMonth и getYear, соответственно. Эти методы вызываются для объекта dt, содержащего текущую дату. Текстовая строка даты выводится в документ HTML с помощью метода write, определенного в объекте document: document.write(szDate); Заметим, что объект Date содержит также информацию о текущем времени. Она извлекается для отображения с помощью методов getHours, getMinutes и getSeconds (соответственно часы, минуты и секунды): document.write("Time: " +
dt.getHours() Язык сценариев JavaScript допускает работу с массивами встроенных объектов, объектов браузера и любых других объектов. Вы можете создать массив как объект встроенного класса Array, а затем обращаться к его элементам средствами обычной операции индексации: var myArray; Встроенный класс Math Хотя сценарии JavaScript редко применяют для математических вычислений, в нем все же есть встроенный класс Math, предназначенный как раз для этого. Перечислим свойства класса Math. Все они являются математическими константами, поэтому сценарий JavaScript не может изменять их значение. Это свойство представляет собой константу e. Приблизительное ее значение равно 2,72. Вот пример использования свойства E: var nE; Здесь мы записываем в переменную nE значение константы e. Свойство PI — это число p, то есть константа с приблизительным значением, равным 3,14. Пример использования свойства PI: var nL; Здесь свойство PI применяется для вычисления длины окружности по ее радиусу. Формула такова: l = 2pR, где R — радиус окружности. Свойство LN2 — константа со значением натурального логарифма числа 2, то есть ln2. Пример использования: var nValue; Свойство LN10 — константа со значением натурального логарифма числа 10, то есть ln10. Пример использования: var nValue; Это свойство является константой со значением, равным логарифму числа 2 по основанию e, то есть loge2. Пример использования: var nValue; Свойство LOG10E — это логарифм числа e по основанию 10, то есть log10e. Пример использования: var nValue; Свойство SQRT2 — это значение квадратного корня из 2. Пример использования: var nValue; Свойство SQRT1_2 — это значение квадратного корня из 0,5. Пример использования: var nValue; Перечислим методы класса Math. Вычисление абсолютного значения. Пример использования: var nValueAbs; Здесь в переменную nValueAbs записывается абсолютное значение переменной nValue. Вычисление арккосинуса. Пример использования: var nValue; Вычисление арксинуса. Пример использования: var nValue; Вычисление арктангенса. Пример использования: var nValue; Вычисление наименьшего целого значения, большего или равного аргументу функции. Пример использования: var nValue; Вычисление косинуса. Пример использования: var nValue; Экспоненциальная функция, значение которой равно числу e, возведенному в степень аргумента функции. Пример использования: var nValueExp; Вычисление наибольшего целого значения, меньшего или равного аргументу функции. Пример использования: var nValue; Вычисление натурального логарифма аргумента функции. Пример использования: var nValue; Определение наибольшего из двух значений. Пример использования: var nValue1; Определение наименьшего из двух значений. Пример использования: var nValue1; Возведение числа в заданную степень. Пример использования: var nValue; Здесь число 2 возводится в степень 3, а результат, равный 8, записывается в переменную nValue. Метод random возвращает случайное число в интервале от 0 до 1. Пример использования: var nRandomValue; Метод round предназначен для выполнения округления значения аргумента до ближайшего целого. Если десятичная часть числа равна 0,5 или больше этого значения, то выполняется округление в большую сторону, если меньше — в меньшую. Пример использования: var nValue; После выполнения округления значение nValue равно 2. Вычисление синуса. Пример использования: var nValue; Вычисление квадратного корня от аргумента. Пример использования: var nValueSqrt; Вычисление тангенса. Пример использования: var nValue; Встроенный класс Date С помощью методов встроенного класса Date сценарий JavaScript выполняет различные действия с часами компьютера, например получает и устанавливает текущую дату и время. Ниже мы кратко опишем конструкторы и методы этого класса. Конструкторы класса Date Для использования большинства методов класса Date необходимо создать объект этого класса при помощи одного из трех конструкторов. Конструктор первого вида вызывается следующим образом: var dtNewDate; Здесь создается объект Date, в котором хранится информация о текущей дате и времени. Это время задается по Гринвичу, или, пользуясь современным определением, с использованием времени Universal Coordinated Time (UCT). Конструктор второго вида позволяет указать дату через единственный параметр: var dtNewDate; Параметр nMilliseconds задает дату в миллисекундах, считая от 1 января 1970 года. И наконец, конструктор третьего вида предназначен для раздельной установки компонентов даты и во многих случаев более удобен для использования: var dtNewDate; Параметры этого конструктора перечислены в таблице 10-11. Таблица 10-11. Параметры конструктора Date
Определение даты, хранящейся в объекте класса Date. Метод возвращает значение календарной даты в диапазоне от 1 до 31. Пример использования: var dtNewDate; Определение номера дня недели, хранящегося в объекте класса Date. Метод возвращает 0 для воскресения, 1 — для понедельника и т. д. Пример использования: nDay = dtDate.getDay(); Определение количества часов, прошедших после полуночи. Пример использования: nHours = dtDate.getHours(); Определение количества минут, прошедших с начала часа. Пример использования: nMinutes = dtDate.getMinutes(); Определение количества месяцев, прошедших с января. Пример использования: nMonth = dtDate.getMonth(); Определение количества секунд, прошедших с начала минуты. Пример использования: nSeconds = dtDate.getSeconds(); Определение времени для заданного объекта класса Date. Метод getTime возвращает количество миллисекунд, прошедших с 1 января 1970 года. Пример использования: nMilliseconds = dtDate.getTime(); Определение смещения локального времени относительно времени по Гринвичу (в миллисекундах). Пример использования: nOffsetMilliseconds = dtDate.getTimeZoneOffset(); Метод getYear возвращает год, хранящийся в объекте класса Date. Пример использования: nYear = dtDate.getYear(); Метод parse возвращает количество миллисекунд, прошедших с 00 часов 00 минут 1 января 1970 года по время, указанное в параметре функции. Для вызова этого метода Вам не нужно создавать объект класса Date, достаточно просто сослаться на имя этого класса: nMS = Date.parse(szDataString); Через параметр szDataString Вы можете указать время, например так: “12 Oct 1998 12:00:00” Первая из этих строк задает локальную дату и время, вторая — дату и время по Гринвичу, и, наконец, последняя — время и дату по Гринвичу со смещением на 3 часа и 30 минут. Метод parse обычно применяют вместе с конструктором объекта Date или с методом setTime, который мы рассмотрим ниже. Метод setDate используется для установки календарной даты в объекте класса Date. Пример использования: dtNewDate.setDate(nDateNumber); Параметр nDateNumber может принимать значения от 1 до 31. Метод setHours используется для установки количества часов, прошедших после полуночи, в объекте класса Date. Пример использования: dtNewDate.setHours(nHours); Параметр nHours может принимать любые положительные или отрицательные значения. При необходимости происходит соответствующее изменение календарной даты, записанной в объекте класса Date. Метод setMinutes используется для определения количества минут, прошедших с начала часа, в объекте класса Date. Пример использования: dtNewDate.setMinutes(nMinutes); Параметр nMinutes может принимать любые положительные или отрицательные значения. При необходимости происходит соответствующее изменение календарной даты, записанной в объекте класса Date. Метод setMonth используется для установки номера месяца, прошедшего с начала года, в объекте класса Date. Пример использования: dtNewDate.setMonth(nMonth); Параметр nMonth может принимать любые положительные или отрицательные значения. При необходимости происходит соответствующее изменение календарной даты, записанной в объекте класса Date. Метод setSeconds применяется для определения количества секунд, прошедших с начала минуты, в объекте класса Date. Пример использования: dtNewDate.setSeconds(nSeconds); Параметр nSeconds может принимать любые положительные или отрицательные значения. При необходимости происходит соответствующее изменение календарной даты, записанной в объекте класса Date. С помощью метода setTime можно установить дату в объекте класса Date, соответствующую заданному количеству миллисекунд, прошедших с 1 января 1970 года. Пример использования: dtNewDate.setTime(nMilliseconds); Метод setYear применяется для определения номера года в объекте класса Date. Пример использования: dtNewDate.setYear(nsetYear); Метод toGMTString предназначен для преобразования даты в строку, записанную в стандартном формате времени по Гринвичу (GMT). Аналогично предыдущему, однако вместо времени GMT используется локальное время. Метод UTC преобразует дату, заданную параметрами метода, в количество миллисекунд, прошедшее с 1 января 1970 года. При использовании метода UTC, так же как и метода parse, Вам не нужно создавать объект класса Date: nMillisecond = Date.UTC(year, month, date, hours, min, sec, ms); В этом разделе перечислены несколько полезных встроенных функций, которые Вы можете использовать в своих сценариях JavaScript. Функция eval предназначена для преобразования текстовой строки в численное значение. Через единственный параметр она получает текстовую строку и вычисляет ее как выражение языка JavaScript. Функция возвращает результат вычисления: var nValue = Eval(szStr); Эта функция предназначена для преобразования текстовой строки в целочисленное значение. Строка передается функции через параметр: var nValue = parseInt(szStr); Функция parseFloat пытается преобразовать текстовую строку в число с плавающей точкой. Текстовая строка передается этой функции через первый параметр, а основание счисления — через второй: var nFloat = parseFloat(szStr, nRadix); Средствами функции escape сценарий JavaScript может закодировать текстовую строку с применением URL-кодировки. В этой кодировке специальные символы — пробел или символ табуляции — преобразуются к следующему виду: %XX, где XX — шестнадцатеричный код символа. Вот пример использования этой функции: var szURL = escape(szStr); Функция unescape выполняет действие, прямо противоположное действию функции unescape — перекодирует строку из URL-кодировки в обычную текстовую строку: var szStr = unescape(szURL); |