[Содержание] [Предыдущая] [Следующая] [Индекс]

Глава 2
Операторы

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

Таблица 2.1 подводит итог всех операторов JavaScript.

Таблица 2.1 операторы JavaScript. 
Категория Оператора Оператор Описание
Арифметические Операторы
+
(Сложение) Складывает 2 числа.
++
(Инкремент) Добавляет еденицу к переменной, представляющей число (возвращает или новое или старое значение переменной)
-
(Унарный минус, вычетание) Как унарный оператор, делает отрицательным значение параметра. Как бинарный оператор, вычитает 2 числа.
--
(Декремент) Вычитает еденицу из переменной, представляющей число (возвращает или новое или старое значение переменной)
*
(Умножение) Умножает 2 числа.
/
(Деление) Делит 2 числа.
%
(Модуль) Вычисляет целочисленный остаток от деления 2 чисел.
Строковые Операторы + (Сложение строк) Конкатенирует 2 строки.
+= Конкатенирует 2 строки и присваивает результат первому операнду.
Логические Операторы && (Логический AND) Возвращает true, если оба логических операнда true. Иначе, возвращает false.
|| (Логический OR) Возвращает true, если любое логическое выражение true. Если оба false, возвращает false.
! (Логическое отрицание) Если одинственный операнд true, возвращает false. Иначе, возвращает true.
Поразрядные Операторы
&
(Поразрядный AND) Возвращает еденицу в каждую битовую позицию, если биты обоих операндов еденицы.
^
(Поразрядный XOR) Возвращает еденицу в битовую позицию, если бит одного, но не обоих операндов еденица.
|
(Поразрядный OR) Возвращает еденицу в битовую позицию, если бит любого операнда еденица.
~
(Поразрядный NOT) Зеркально отражает биты операнда.
<<
(Левый сдвиг) Сдвигает первый операнд в двоичном представлении в лево на число битов, указанных во втором операнде, вдвигая нули справа.
>>
(Знакоразмножающий сдвиг вправо) Сдвигает первый операнд в двоичном представлении вправо на количество битов, указанных во втором операнде, отбрасывая перемещенные биты.
>>>
(Нулями заполняющий сдвиг вправо) Сдвигает первый операнд в двоичном представлении вправо на количество битов, указанных во втором операнде, отбрасывая перемещенные биты и вдвигая нули слева.
Операторы Присваивания
=
Присваивает значение второго операнда первому операнду.
+=
Складывает 2 числа и присваивает результат первому.
-=
Вычитает 2 числа и присваивает результат первому.
*=
Умножает 2 числа и присваивает результат первому.
/=
Делит 2 числа и присваивает результат первому.
%=
Вычисляет модуль 2 чисел и присваивает результат первому.
&=
Выполняет поразрядный AND и присваивает результат первому операнду.
^=
Выполняет поразрядный XOR и присваивает результат первому операнду.
|=
Выполняет поразрядный OR и присваивает результат первому операнду.
<<=
Выполняет сдвиг влево и присваивает результат первому операнду.
>>=
Выполняет знакоразмножающий сдвиг вправо и присваивает результат первому операнду.
>>>=
Выполняет нулями заполняющий сдвиг вправо и присваивает результат первому операнду.
Операторы Сравнения == Возвращает true, если операнды равны.
!= Возвращает true, если операнды не равны.
> Возвращает true, если левый операнд больше чем правый операнд.
>= Возвращает true, если левый операнд больше чем или равен правому операнду.
< Возвращает true, если левый операнд меньше чем правый операнд.
<= Вовращает true, если левый операнд меньше чем или равен правому операнду.
Специальные Операторы
?:
Позволяет Вам выполнить простое "if...then...else"
,
Оценивает два выражения и возвращает результат второго выражения.
delete
Позваляет Вам удалять свойство объекта или элемент с определенным индексом в массиве.
new
Позваляет Вам создавать образец определяемого пользователем типа объекта или одного из встроенных типов объектов.
this
Ключевое слово, которое Вы можете использовать, чтобы обратиться к текущему объекту.
typeof
Возвращает строку, указывающую тип неоцененного операнда.
void
Оператор void определяет выражение, которое будет оценено без возврата значения.

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

Оператор присваивания присваивает значение левому операнду, основанное на значении правого операнда.

Реализовано в Navigator 2.0

Основной оператор присваивания присвоить (=), присваивает значение правого операнда левому операнду. То есть x = y присваивает значение y операнду x. Другие операторы присваивания это сокращения стандартного оператора, как показано в Таблице 2.2.

Таблица 2.2 Операторы Присваивания
Сокращенный оператор Значение
x += y
x = x + y
x -= y 
x = x - y
x *= y 
x = x * y
x /= y 
x = x / y
x %= y 
x = x % y
x <<= y 
x = x << y
x >>= y 
x = x >> y
x >>>= y
x = x >>> y
x &= y
x = x & y
x ^= y
x = x ^ y
x |= y
x = x | y

Операторы Сравнения

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

Реализовано в Navigator 2.0

Они описаны в Таблице 2.3. В примерах в этой таблице принято, что var1 было присвоено значение 3 и var2 было присвоено значение 4.

Таблица 2.3 Операторы сравнения
Оператор Описане Примеры, возвращающие истину
Равно (==) Возвращает true, если операнды равны.
3 == var1
Не равно (!=) Возвращает true, если операнды не равны.
var1 != 4
Больше чем (>) Возвращает true, если левый операнд больше чем правый операнд.
var2 > var1
Больше чем или равно (>=) Возвращает true, если левый операнд больше чем или равен правому операнду.
var2 >= var1
var1 >= 3
Меньше чем (<) Возвращает true, если левый операнд меньше чем правый операнд.
var1 < var2
Меньше чем или равно (<=) Возвращает true, если левы операнд меньше или равен правому операнду.
var1 <= var2
var2 <= 5

Арифметические Операторы

Арифметические операторы берут числовые значения (литералы или переменные) как свои операнды и возвращают одиночное числовое значение. Стандартные арифметические операторы сложение (+), вычитание (-), умножение (*) и деление (/). Эти операторы работают так же, как в других языках программирования.

Реализовано в Navigator 2.0

% (Модуль)

Оператор модуля используется следующим образом:

var1 % var2
Оператор модуля возвращает первый операнд по модулю второго операнда, то есть var1 по модулю var2, в предшествующей инструкции, где var1 и var2 переменные. Функция модуль это целочисленный остаток от деления var1 на var2. Например, 12 % 5 возвращает 2.

++ (Инкремент)

Оператор инкремента используется следующим образом:

var++ или ++var

Этот оператор инкрементирует (добавляет единицу) операнд и возвращает значение. Если используется постфикс, оператор после операнда (например, x++), то возвращается значение перед инкрементированием. Если используется префикс,оператор перед операндом (например, ++x), то возвращается значение после инкрементирования.

Например, если x равно трем, тогда выражение y = x++ установит y равным 3 и инкрементирует x до 4. Если x равен 3, тогда выражение y = ++x инкрементирует x до 4 и установит y равным 4.

-- (Декремент)

Оператор декремента используется следующим образом:

var-- или --var

Этот оператор декрементирует (вычитает единицу) операнд и возвращает значение. Если используется постфикс (например, x--), тогда возвращается значение перед декрементированием. Если испольуется префикс (например, --x), тогда возвращается значение после декрементирования.

Например, если x равен трем, тогда выражение y = x-- установит y равным 3 и декрементирует x до 2. Если x равно 3, тогда выражение y = --x декрементирует x до 2 и устанавливает y равным 2.

- (Унарный Минус)

Унарный оператор вычитания предшествует операнду и делает его отрицательным. Например, y = -x делает отрицательным значение x и присваивает его y, то есть, если x был равен 3, y получит значение -3, а x сохранит начение 3.

Поразрядные Операторы

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

Таблица 2.4 подводит итог поразрядных операторов JavaScript

Таблица 2.4 Поразрядные операторы
Оператор Использование Описание
Поразрядный AND
a & b
Возвращает еденицу в каждую битовую позицию, если биты обоих операндов еденицы.
Поразрядный OR
a | b
Возвращает единицу в бит, если бит любого операнда еденица.
Поразрядный XOR
a ^ b
Возвращает единицу в битовую позицию, если биты одного, но не обоих операндов единица.
Поразрядный NOT
~ a
Зеркально отражает биты операнда.
Сдвиг влево
a << b
Сдвигает a в двоичном представлении на b битов влево, вдвигая нули справа.
Знакоразмножающий сдвиг вправо
a >> b
Сдвигает a в двоичном представлении на b битов вправо, отбрасывая перемещенные биты.
Заполняющий нулями сдвиг вправо
a >>> b
Сдвигает a в двоичном представлении на b битов вправо, отбрасывая перемещенные биты и вдвигая нули слева.

Поразрядные Логические Операторы

Реализовано в Navigator 2.0

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

Например, двоичное представление девяти 1001 и двоичное представление пятнадцати 1111. Так, когда поразрядные операторы применяются к этим значениям, результаты следующие:

Поразрядные Операторы Сдвига

Реализовано в Navigator 2.0

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

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

<< (Сдвиг Влево)

Этот оператор сдвигает первый операнд на определенное число битов влево. Лишние биты, сдвинутые влево, отбрасываются. Нулевые биты вдвигаются справа.

Например, 9<<2 выдает тридцать шесть, потому что 1001 сдвинутое на два бита влево становится 100100, которое является тридцатью шестью.

>> (Знакоразмножающий Сдвиг Вправо)

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

Например, 9>>2 выдает два, потому что 1001 сдвинутое на два бита вправо становится 10, которое является два. Аналогично, -9>>2 выдает -3, потому что сохраняется знак.

>>> (Заполняющий Нулями Сдвиг Вправо)

Этот оператор сдвигает первый операнд на определеное число битов вправо. Лишние биты, сдвинутые вправо отбрасываются. Нулевые биты перемещаются слева.

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

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

Логические операторы берут Булевы (логические) значения как операнды и возвращают Булево значение.

Реализовано в Navigator 2.0

Они описаны в Таблице 2.5.

Таблица 2.5 Логические операторы
Оператор Использование Описание
and (&&)
expr1 && expr2
Вовращает expr1, если преобразование false. Иначе, возвращает expr2.
or (||)
expr1 || expr2
Возвращает expr1, если преобразование true. Иначе, возвращает expr2.
not (!)
!expr
Если expr true, возвращает false; если expr false, возвращает true.

Примеры

Рассмотрите следующий сценарий:

<script language="JavaScript1.2">"
v1 = "Кошка";
v2 = "Собака";
v3 = false;
document.writeln("t && t возвращает " + (v1 && v2));
document.writeln("f && t возвращает " + (v3 && v1));
document.writeln("t && f возвращает " + (v1 && v3));
document.writeln("f && f возвращает " + (v3 && (3 == 4)));
document.writeln("t || t возвращает " + (v1 || v2));
document.writeln("f || t возвращает " + (v3 || v1));
document.writeln("t || f возвращает " + (v1 || v3));
document.writeln("f || f возвращает " + (v3 || (3 == 4)));
document.writeln("!t возвращает " + (!v1));
document.writeln("!f возвращает " + (!v3));
</script>
Этот сценарий показывает следующее:

t && t возвращает Собака
f && t возвращает false
t && f возвращает false
f && f возвращает false
t || t возвращает Кошка
f || t возвращает Кошка
t || f возвращает Кошка
f || f возвращает false
!t возвращает false
!f возвращает true

Выражение Short-Circuit

Этот сценарий показывает, как логические выражения оцениваются слева направо, они проверяют возможности выражения "short-circuit", использующего следующие правила:

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

Строковые Операторы

В дополнение к операторам сравнения, которые могут использоваться со строковыми значениями, оператор конкатенации (+) конкатенирует два строковых значения вместе и возвращает другую строку, которая является объединением двух строк операнда. Например, "моя " + "строка" возвращает строку "моя строка".

Реализовано в Navigator 2.0

Сокращенный оператор присваивания += может также использоваться, чтобы конкатенировать строки. Например, если переменная mystring имеет значение "alpha," то выражение mystring += "bet" вычисляет "alphabet" и присваивает это значение mystring.

Специальные Операторы

?: (Условный оператор)

Условный оператор единственный JavaScript оператор, который имеет три операнда. Этот оператор часто используется как сокращение для инструкции if.

Реализовано в Navigator 2.0

Синтаксис

условие ? expr1 : expr2

Параметры

условие
выражение, которое оценивается как true или false
expr1, expr2
выражения со значениями любого типа.

Описание

Если условие true, оператор возвращает значение expr1; иначе, возвращает значение expr2. Например, чтобы отобразить различные сообщения, основанные на значении переменной isMember, Вы можете использовать это выражение:

document.write ("The fee is " + (isMember ? "$2.00" : "$10.00"))

, (Оператор запятая)

Оператор запятая очень прост. Он оценивает оба из операндов и возвращает значение второго операнда.

Реализовано в Navigator 2.0

Синтаксис

expr1, expr2

Параметры

expr1, expr2
Любые выражения

Описание

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

Например, если a 2-размерный массив с 10 элементами в строке, следующий код использует оператор запятая, чтобы увеличить две переменные сразу. Код печатает значения диагональных элементов в массиве:

for (var i=0, j=10; i <= 10; i++, j--)
   document.writeln("a["+i+","+j+"]= " + a[i,j])

delete

Удаляет свойство объекта или элемент в определенном индексе массива.

Реализовано в Navigator 2.0

Синтаксис

delete objectName.property
delete objectName[index]
delete property

Параметры

objectName
Имя объекта.
property
Существующее свойство.
index
Целое число, представляющее расположение элемента в массиве

Описание

Третья форма допустима только внутри инструкции with.

Если удаление успешно, оператор delete устанавливает свойство или элемент в undefined. delete обычно возвращает undefined.

new

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

Реализовано в Navigator 2.0

Синтаксис

objectName = new objectType (param1 [,param2] ...[,paramN])

Аргументы

objectName
Имя нового образца объекта.
objectType
Тип объекта. Это должна быть функция, которая определяет тип объекта.
param1...paramN
Значения свойств объекта. Эти свойства - параметры, определенные для функции objectType.

Описание

Создание определяемого пользователем типа объекта требует двух шагов:

  1. Определите тип объекта, написав функцию.

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

Вы можете всегда добавить свойство к предварительно определенному объекту. Например, иструкция car1.color = "black" добавляет свойство color в car1, и присваивает ему значение "black". Однако, это не воздействует на любые другие объекты. Чтобы добавить новое свойство ко всем объектам того же самого типа, Вы должны добавить свойство к определению типа объекта car.

Вы можете добавлять свойство к предварительно определенному типу объекта, используя свойство Function.prototype. Оно определяет свойство, которое разделено всеми объектами, созданными этой функцией, скорее чем только одним образцом типа объекта. Следующий код добавляет свойство color ко всем объектам типа car, и затем присваивает значение свойству color объекта car1. Для подробной информации, смотрите prototype

Car.prototype.color=null
car1.color="black"
birthday.description="The day you were born"

Примеры

Пример 1: Тип объекта и образец объекта. Предположим Вы хотите создать тип объекта для автомобилей. Вы хотите этот тип объекта назвать car, и Вы хотите, чтобы oн имел свойства make, model и year. Чтобы сделать это, Вы написали бы следующую функцию:

function car(make, model, year) {
   this.make = make
   this.model = model
   this.year = year
}
Теперь Вы можете создать объект, названный mycar следующим образом:

mycar = new car("Eagle", "Talon TSi", 1993)
Эта инструкция создает mycar и присваивает заданные значения его свойствам. Значение mycar.make строка "Eagle", mycar.year целое число 1993, и так далее.

Вы можете создать любое число объектов car вызывая new. Например,

kenscar = new car("Nissan", "300ZX", 1992)
Пример 2: свойство объекта, которое является самостоятельным объектом. Предположим Вы определяете объект, названный person следующим образом:

function person(name, age, sex) {
   this.name = name
   this.age = age
   this.sex = sex
}
И затем создаете два новых объекта person следующим образом:

rand = new person("Rand McNally", 33, "M")
ken = new person("Ken Jones", 39, "M")
Затем Вы можете переписать определение car, чтобы включить свойство owner, которое содержит объект person следующим образом:

function car(make, model, year, owner) {
   this.make = make;
   this.model = model;
   this.year = year;
   this.owner = owner;
}
Чтобы определить новые объекты, Вы затем используете следующее:

car1 = new car("Eagle", "Talon TSi", 1993, rand);
car2 = new car("Nissan", "300ZX", 1992, ken)
Вместо того, чтобы передавать литеральное строковое или целочисленное значение при создании новых объектов, выше упомянутые инструкции передают объекты rand и ken как параметры для owner. Чтобы выяснить имя владельца car2, Вы можете обратиться к следующему свойству:

car2.owner.name

this

Ключевое слово, которое Вы можете использовать, чтобы обратиться к текущему объекту. Вообще, метод this ссылается к вызывающему объекту.

Реализовано в Navigator 2.0

Синтаксис

this[.propertyName]

Примеры

Предположим вызывается функция validate, проверяющая правильность значения свойства объекта, передавая объекту наивысшее и наинизшее значения:

function validate(obj, lowval, hival) {
   if ((obj.value < lowval) || (obj.value > hival))
      alert("Invalid Value!")
}
Вы могли бы вызвать validate в обработчике события onChange каждого элемента формы, используя this, передавая ему элемент формы, как в следующем примере:

<B>Enter a number between 18 and 99:</B>
<INPUT TYPE = "text" NAME = "age" SIZE = 3
   onChange="validate(this, 18, 99)">

typeof

Оператор typeof используется одним из следующих способов:

1. typeof операнд
2. typeof (операнд)
Оператор typeof возвращает строку, указывающую тип неоцененного операнда. Этот операнд строка, переменная, ключевое слово или объект, для которого должен быть возвращен тип. Круглые скобки факультативны.

Реализовано в Navigator 3.0

Предположим Вы определяете следующие переменные:

var myFun = new Function("5+2")
var shape="round"
var size=1
var today=new Date()
Оператор typeof возвратит следующие результаты для этих переменных:

typeof myFun is object
typeof shape is string
typeof size is number
typeof today is object
typeof dontExist is undefined
Для ключевых слов true и null, оператор typeof возвратит следующие результаты:

typeof true is boolean
typeof null is object
Для чисел или строк оператор typeof возвратит следующие результаты:

typeof 62 is number
typeof 'Hello world' is string
Для значений свойств оператор typeof возвратит тип значения, которое свойство содержит

typeof document.lastModified is string
typeof window.length is number
typeof Math.LN2 is number
Для методов и функций оператор typeof возвратит результаты следующим образом:

typeof blur is function
typeof eval is function
typeof parseInt is function
typeof shape.split is function
Для предопределенных объектов оператор typeof возвратит результаты следущим образом:

typeof Date is function
typeof Function is function
typeof Math is function
typeof Option is function
typeof String is function

void

Оператор void используется одним из следующих способов:

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

Реализовано в Navigator 3.0

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

Следующий код создает гипертекстовую ссылку, которая ничего не делает, когда пользователь щелкает по ней. Когда пользователь щелкает по ссылке, void(0) оценивается как 0, но это не имеет никакого эффекта в JavaScript.

<A HREF="javascript:void(0)">Нажмите здесь, чтобы ничего не произошло</A>
Следующий код создает гипертекстовую ссылку, которая представляет на рассмотрение форму, когда пользователь щелкает по ней.

<A HREF="javascript:void(document.form.submit())">
Нажмите здесь, чтобы отправить</A>


[Содержание] [Предыдущая] [Следующая] [Индекс]

Последняя Модификация: 10/31/97 12:29:53


Права © 1997 Netscape Communications Corporation



Все мессаги сюда:yanich@inbox.ru
Hosted by uCoz