Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

Сценарии JavaScript в активных страницах Web

© Александр Фролов, Григорий Фролов
Том 34, М.: Диалог-МИФИ, 1998, 288 стр.

[Назад] [Содеожание] [Дальше]

Операторы языка JavaScript

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

Унарные операторы

Унарные операторы применяются для изменения знака, выполнения операции дополнения, инкремента и декремента:

Унарный оператор

Назначение

-

Изменение знака на противоположный

!

Дополнение. Используется для реверсирования значения логических переменных

++

Увеличение значения переменной. Может применяться как префикс переменной или как ее суффикс

--

Уменьшение значения переменной. Может применяться как префикс переменной или как ее суффикс

Вот примеры использования унарных операторов:


i=0;      // начальное значение переменной i равно 0
i++;      // значение i равно 1
--i;      // значение i снова равно 0

var j=3;  // значение переменной j равно 3
i = -j;   // значение переменной i равно -3

var fYes = true; // значение переменной fYes равно true
testFlag(!fYes); // функции testFlag передается 
                 //    значение false

Бинарные операторы

Бинарные операторы соединяют два операнда. В языке сценариев JavaScript предусмотрены бинарные операторы для вычитания, сложения, умножения, деления и вычисления остатка деления:

Бинарный оператор

Назначение

-

Вычитание

+

Сложение

*

Умножение

/

Деление

%

Вычисление остатка от деления

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


i=0;        // начальное значение переменной i равно 0
i = i + 1;  // значение i равно 1

var j=9;    // значение переменной j равно 9
i = j / 2;  // значение переменной i равно 4
k = j % 2;  // значение переменной i равно 1

В своих сценариях вы можете применять операторы, выполняющие над битами переменных такие логические операции, как И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ, НЕ:

Оператор

Логическая операция

&

И

|

ИЛИ

^

ИСКЛЮЧАЮЩЕЕ ИЛИ

~

НЕ

Перечисленные выше операторы перед выполнением своих функций преобразуют значения переменных в 32-разрядные целые числа.

Операторы сдвига

Для выполнения операций сдвига в языке JavaScript предусмотрено три оператора:

Оператор сдвига

Назначение

>>

Сдвиг в правую сторону

<<

Сдвиг в левую сторону

>>>

Сдвиг в правую сторону с заполнением освобождаемых разрядов нулями

Перед использованием операторов сдвига значение переменной преобразуется в 32-разрядное целое число.

Ниже мы привели пример, в котором в переменную nValue записывается значение, полученное в результате сдвига бит числа 4. Сдвиг выполняется на два бита влево:


var nValue;
nValue = 4 << 2;

Операторы отношения

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

Итак, ниже мы представили список операторов отношения языка сценариев JavaScript:

Оператор отношения

Условие, при котором оператор возвращает значение true

>

Левый операнд больше правого

>=

Левый операнд больше или равен правому

<

Левый операнд меньше правого

<=

Левый операнд меньше или равен правому

==

Левый операнд равен правому

!=

Левый операнд не равен правому

Примеры использования этих операторов вы найдете в разделе, посвященном условным операторам.

В условных операторах также часто применяются логические операторы:

Логический оператор

Описание

||

Оператор ИЛИ. Возвращает значение true, когда один из операндов равен true

&&

Оператор И. Возвращает значение true, когда оба операнда равны true

Оператор присваивания

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

Ниже мы перечислили все возможные комбинации оператора присваивания и других операторов:

Оператор

Описание

=

Простое присваивание

+=

Увеличение численного значения или слияние строк

-=

Уменьшение численного значения

*=

Умножение

/=

Деление

%=

Вычисление остатка от деления

>>=

Сдвиг вправо

>>>=

Сдвиг вправо с заполнением освобождаемых разрядов нулями

<<=

Сдвиг влево

|=

ИЛИ

&=

И

^=

ИСКЛЮЧАЮЩЕЕ ИЛИ

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

Рассмотрим, например, применение оператора += для увеличения содержимого числовой переменной.

Вначале решим эту задачу без использования данного оператора. Ниже мы объявили переменную с именем nCounter и присвоили ей начальное значение 1, а затем увеличили это значение на 5:


var nCounter = 1;
nCounter = nCounter + 5;

Теперь сделаем то же самое, но по-другому:


var nCounter = 1;
nCounter += 5;

Как видите, второй способ короче первого.

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


nCounter >>= 3;

Результат при этом будет такой же, как и при выполнении следующей строки:


nCounter = nCounter >> 3;

Условные операторы

Любой язык программирования был бы бесполезен, если бы в нем не были предусмотрены те или иные средства ветвления при выполнении программы. В языке JavaScript предусмотрен условный оператор else-if, который позволяет выполнять разные программные строки в зависимости от условия.

Общий вид оператора else-if представлен ниже:


if(условие)
  строка 1
[else
  строка 2]

Часть оператора, выделенная квадратными скобками, является необязательной. При выполнении этого оператора оценивается условие, заданное в круглых скобках после ключевого слова if. Если в результате оценки условия получилось логическое значение true, выполняется строка 1. Если же получилось значение false, то выполняется строка 2 (в том случае, когда она присутствует.

Оператор if-else может быть вложенным. Учтите, что если в строке 1 или строке 2 необходимо расположить несколько операторов, их следует выделить фигурными скобками:


if(nYourAge < 18)
{
  bAccessDenied = true;
  szNextPage = "bye18.html";
}
else if(nYourAge > 99)
{
  bAccessDenied = true;
  szNextPage = "bye99.html";
}
else
{
  bAccessDenied = false;
  szNextPage = "welcome.html";
}

Здесь вначале оценивается условие (nYourAge < 18). Если содержимое переменной nYourAge меньше 18, переменной bAccessDenied присваивается значение true, а переменной szNextPage - текстовая строка “bye18.html”.

Затем содержимое nYourAge сравнивается с числом 99. Если переменная nYourAge имеет значение, большее чем 99, в переменную bAccessDenied записывается значение true, а переменную szNextPage - текстовая строка “bye99.html”.

И, наконец, если ни одно из двух условий не было выполнено, то есть значение переменной nYourAge находится в интервале от 18 до 99, в переменную bAccessDenied записывается значение false, а переменную szNextPage - текстовая строка “welcome.html”.

Существует также специальный тип условного оператора, который называется оператором ?:. Этот оператор в общем виде записывается так:


выражение ? строка 1 : строка 2

При вычислении оператора ?: вначале оценивается логическое выражение, расположенное в левой части. Если оно равно true, выполняется строка 1, а если false - строка 2.

Ниже мы привели пример использования условного оператора ?: для присвоения значения переменной bAccessDenied в зависимости от содержимого переменной nYourAge:


bAccessDenied = 
  (nYourAge < 18 || nYourAge > 99) ? true : false;

Если значение переменной nYourAge находится в интервале от 18 до 99, переменной bAccessDenied присваивается значение true, а если оно не попадает в этот интервал - false. Традиционное решение этой задачи с помощью оператора else-if заняло бы больше места:


if(nYourAge < 18 || nYourAge > 99)
  bAccessDenied = true;
else
  bAccessDenied = false;

В приведенных выше примерах мы указывали составное условие:


(nYourAge < 18 || nYourAge > 99)

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


((nYourAge < 18) || (nYourAge > 99))

Операторы цикла

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

Оператор for

Общий вид оператора for представлен ниже:


for([инициализация;] [условие;] [итерация])
{
  . . .
  строки тела цикла
  . . .
}

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

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

Область итерации применяется для изменения значений переменных цикла, например, для уменьшения счетчика цикла.

Оператор for-in

Оператор for-in предназначен для просмотра всех свойств объекта и записывается в следующем виде:


for(переменная in объект)
{
  . . .
  строки тела цикла
  . . .
}

Оператор while

Для организации циклов с проверкой условия их завершения перед выполнением итерации используется оператор while:


while(условие)
{
  . . .
  строки тела цикла
  . . .
}

Если в результате оценки условия получается значение true, тогда итерация выполняется, если false - цикл прерывается.

Оператор break

С помощью оператора break можно прервать выполнение цикла, созданного операторами for или while, в любом месте. Например:


var i = 0;
while(true)
{
  . . .
  i++;
  if(i > 10)
    break;
  . . .
}

Оператор continue

Выполнение оператора continue внутри цикла for или while приводит к тому, что итерация прерывается, а затем возобновляется заново. Этот оператор не прерывает цикл.

Ниже мы привели пример использования оператора continue:


var i = 0;
while(i < 100)
{
  i++;
  if(i < 10)
    continue;
  . . .
}

Здесь фрагмент тела цикла, отмеченный многоточием, будет выполняться только после того, как значение переменной i станет равным 10. Когда же это значение достигнет 100, цикл будет завершен.

Прочие операторы

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

Оператор

Описание

.

Доступ к полю объекта

[]

Индексирование массива

()

Скобки

,

Запятая

Первый из этих операторов применяется для вызова методов, определенных в объектах, а также для доступа к полям объектов или, как их еще называют, к свойствам объектов.

Ниже, например, мы вызвали метод write, определенный в объекте document:


document.write("Hello, world!");

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

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

Оператор запятая предназначен для разделения выражений, которые должны оцениваться последовательно. Этот прием называется многократным вычислением. Например, в фрагменте исходного текста, показанном ниже, на каждой итерации цикла выполняется увеличение содержимого переменных i и nCycleCount:


var i;
var nCycleCount = 0;
for(i = 0; i < 25; i++, nCycleCount++)
{
  . . .
}

Старшинство операторов JavaScript

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

Первыми вычисляются операторы, расположенные в начале таблицы старшинства:

Оператор

Описание

. [] ()

Доступ к полю, индексирование в массиве, вызов функции

++ -- - ~ !

Унарные операторы

* / %

Умножение, деление, вычисление остатка от деления

+ - +

Сложение, вычитание, слияние текстовых строк

<< >> >>>

Битовые сдвиги

< <= > >=

Меньше, меньше или равно, больше, больше или равно

== !=

Равенство, неравенство

&

Логическая операция И

^

Логическая операция ИСКЛЮЧАЮЩЕЕ ИЛИ

|

Логическая операция ИЛИ

&&

Логический оператор отношения И

||

Логический оператор отношения ИЛИ

?:

Условный оператор

= += -= *= /= %= >>= >>>= <<= |= &= ^=

Присваивание

,

Многократное вычисление

Функции в языке сценариев JavaScript

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

Обычно функции определяются в разделе заголовка документа HTML, отмеченного операторами <HEAD> и </HEAD>. Как мы уже говорили, функция должна быть определена перед вызовом. Размещение всех определений функций в разделе заголовка документа HTML гарантирует доступность этих функций при обработке документа.

Общий вид определения функции представлен ниже:


function имя([параметр 1] [,параметр 2] [...,параметр N])
{
  . . .
  строки тела функции
  . . .
  [return значение]
}

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

С помощью ключевого слова return функция может вернуть значение.

[Назад] [Содеожание] [Дальше]