|
|
Книги-onlineГлава3. Выражения и Операции.
|
Сокращённое обозначение | Значение |
---|---|
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 |
Операция сравнения сравнивает операнды и возвращает логическое значение на базе верности сравнения. Операндами могут быть числа, строки, логические значения и объекты. Строки сравниваются на базе стандартного лексикографического порядка с использованием значений Unicode. В таблице даны операции сравнения.
Операция | Описание | Примеры, возвращающие true1 |
---|---|---|
Возвращает true, если операнды равны. Если операнды разных типов, JavaScript пытается конвертировать операнды до типа, пригодного для сравнения. |
3 == var1 "3" == var1 3 == '3' | |
Возвращает true, если операнды не равны. Если операнды разных типов, JavaScript пытается конвертировать операнды до типа, пригодного для сравнения. |
var1 != 4 var2 != "3" | |
3 === var1 | ||
Возвращает true, если операнды не равны и/или не одного типа. |
var1 !== "3" 3 !== '3' | |
var2 > var1 | ||
Возвращает true, если левый операнд больше правого или равен ему. |
var2 >= var1 var1 >= 3 | |
var1 < var2 | ||
Возвращает true, если левый операнд меньше правого или равен ему. |
var1 <= var2 var2 <= 5 |
Эти примеры предполагают, что переменной var1 присвоено значение 3, а переменной var2 значение 4.
Арифметические операции принимают числовые значения (литералы
или переменные) в качестве операндов и возвращают одиночное числовое значение.
Стандартными арифметическими операциями являются сложение (+), вычитание (-),
умножение (*) и деление (/). Эти операции работают так же, как и во многих
других языках программирования, но операция / в JavaScript возвращает результат
деления с плавающей точкой, а не округлённое частное, как в языках программирования C или Java. Например:
1/2 //возвращает 0.5 в JavaScript
1/2 //возвращает 0 в Java
Дополнительно JavaScript предоставляет
арифметические операции, перечисленные в следующей таблице:
Операция | Описание | Пример |
---|---|---|
Бинарная операция. Возвращает целочисленный остаток от деления двух операндов. | ||
Унарная операция. Добавляет 1 к операнду. Если используется как префикс (++x), добавляет единицу и возвращает значение операнда; если используется как постфикс (x++), возвращает значение операнда и затем прибавляет единицу. | Если x равен 3, то ++x устанавливает x в 4 и возвращает 4; а x++ устанавливает x в 4 и возвращает 3. | |
Унарная операция. Вычитает единицу из операнда. Возвращаемое значение аналогично значению для операции инкремента. |
Если x равен 3, то --x устанавливает x в 2 и возвращает 2; а x-- устанавливает x в 2 и возвращает 3. | |
Эти операции рассматривают свои операнды как набор
32-битных двоичных чисел (нулей и единиц), а не как 10-ричные, 16-ричные или
8-ричные числа. Например, 10-ричное число 9 имеет бинарное представление 1001.
Побитовые операции выполняются над такими двоичными представлениями, но
возвращают стандартные числовые значения JavaScript.
В таблице резюмируется информация о побитовых операциях JavaScript.
Операция | Использование | Описание |
---|---|---|
a & b | Возвращает 1 в каждой битовой позиции, где соответствующие биты обоих операндов равны 1. | |
a | b | Возвращает 1 в каждой битовой позиции, где соответствующие биты одного или обоих операндов равны 1. | |
a ^ b |
Возвращает 1 в каждой битовой позиции, где соответствующие биты одного но не обоих операндов равны 1. | |
~ a | ||
a << b | Сдвигает двоичное представление a на b битов влево, заполняя справа нулями. | |
a >> b | Сдвигает двоичное представление a на b битов вправо, отбрасывая смещённые биты. | |
a >>> b | Сдвигает двоичное представление a на b битов вправо, отбрасывая смещённые биты и заполняя нулями слева. |
Концептуально побитовые логические операции работают так:
Например, бинарное представление 9 это 1001, а бинарное
представление 15 это 1111. Итак, если побитовая операция применяется к этим двум числам, результаты будут такими:
Побитовые операции сдвига принимают два операнда: первый
операнд это сдвигаемое количество, а второй специфицирует количество битовых
позиций, на которое сдвигается первый операнд. Направление сдвига контролируется применяемой операцией.
Операции сдвига конвертируют свои операнды в 32-битные
целые и возвращают результат того же типа, что и у левого операнда.
Операции сдвига перечислены в таблице.
Операция | Описание | Пример |
---|---|---|
Эта операция сдвигает первый операнд на специфицированное количество битов влево. Излишние биты, смещённые влево, отбрасываются. Справа биты заполняются нулями. | 9<<2 даёт 36, поскольку 1001, смещённое на 2 бита влево, становится 100100, то есть 36. | |
Первый операнд сдвигается на специфицированное количество битов вправо. Излишние биты, смещённые вправо, отбрасываются. Копии самого левого бита вдвигаются слева. |
9>>2 даёт 2, поскольку 1001, смещённое на 2 бита вправо, становится 10, то есть 2. Аналогично, -9>>2 даёт -3, поскольку знак сохраняется. | |
Первый операнд сдвигается на специфицированное количество битов вправо. Излишние биты, смещённые вправо, отбрасываются. Слева биты заполняются нулями. | 19>>>2 даёт 4, поскольку 10011, смещённое на 2 бита вправо, становится 100, то есть 4. Для неотрицательных чисел, сдвиг вправо с заполнением нулями даёт тот же эффект, что и сдвиг вправо с сохранением знака. |
Логические операции обычно используются с Boolean (булевыми/логическими)
значениями; в этом случае возвращается Boolean-значение. Однако операции &&
и || реально возвращают значение одного из специфицированных операндов, поэтому,
если эти операции используются с не-Boolean-значениями, они могут вернуть не-Boolean
значение. Логические операции описаны в следующей таблице.
Операция | Использование | Описание |
---|---|---|
expr1 && expr2 | (Логическое И) Возвращает expr1, если оно может быть конвертировано в false; иначе возвращает expr2. Таким образом, при использовании с Boolean-значениями, && возвращает true, если оба операнда true; иначе возвращает false. | |
expr1 || expr2 | (Логическое ИЛИ) Возвращает expr1, если оно может быть конвертировано в true; иначе возвращает expr2. Таким образом, при использовании с Boolean-значениями, || возвращает true, если хотя бы один из операндов true; если оба операнда false, возвращает false. | |
!expr | (Логическое НЕ) Возвращает false если её единственный операнд может быть конвертирован в true; иначе возвращает true. |
Примерами выражений, которые могут быть конвертированы в false
являются такие выражения, которые вычисляются в null, 0, пустую строку ("") или undefined.
Вот примеры операции && (логическое И):
a1=true && true // t && t
возвращает true
a2=true && false // t && f
возвращает false
a3=false && true // f && t
возвращает false
a4=false && (3 == 4) // f && f возвращает false
a5="Cat" && "Dog" // t && t возвращает Dog
a6=false && "Cat" // f && t возвращает false
a7="Cat" && false // t && f возвращает false
Примеры операции || (логическое ИЛИ):
o1=true || true // t || t возвращает true
o2=false || true // f || t возвращает true
o3=true || false // t || f возвращает true
o4=false || (3 == 4) // f || f возвращает false
o5="Cat" || "Dog" // t || t возвращает Cat
o6=false || "Cat" // f || t возвращает Cat
o7="Cat" || false // t || f возвращает Cat
Примеры операции ! (логическое НЕ):
n1=!true // !t
возвращает false
n2=!false // !f
возвращает true
n3=!"Cat" // !t
возвращает false
Так как логические выражения вычисляются слева направо,
они проверяются на возможность выполнения "сокращённого" вычисления по следующим правилам:
Правила логики гарантируют, что эти вычисления всегда
будут корректными. Обратите внимание, что часть что-либо
вышеприведённых выражений не вычисляется, поэтому продолжение выполнения вычисления не даст никакого эффекта.
Помимо операций сравнения, может применяться операция
конкатенации/объединения (+) значений двух строк, возвращающее новую строку,
которая является результатом объединения двух строк-операндов. Например, "my " + " string"
возвращает строку "my string".
Сокращённая форма записи операции += также может
использоваться для конкатенации строк. Например, если переменная mystring имеет
значение "alpha," то выражение mystring += "bet" вычисляется до "alphabet"
и это значение присваивается переменной mystring.
В JavaScript имеются следующие специальные операции:
Условная операция - единственная в JavaScript, принимающая
три операнда. Она может дать одно или другое значение на базе условия. Синтаксис таков:
Если condition - true, операция имеет значение val1. Иначе
- значение val2. Вы можете использовать условную операцию в любом месте, где может использоваться стандартная операция.
status = (age >= 18) ? "adult" : "minor"
Этот оператор присваивает значение "adult" переменной status, если age равен 19 или более. Иначе переменной status присваивается значение "minor".
Операция "запятая" (,) просто вычисляет оба операнда и
возвращает значение второго операнда. Первоначально использовалась внутри цикла for,
чтобы дать возможность обновлять значения нескольких переменных за один проход цикла.
Например, если имеется 2-мерный массив из 10 элементов по
измерению, следующий код использует операцию "запятая" для инкремента двух
переменных за один проход. Печатаются значения элементов по диагонали массива:
for (var i=0, j=9; i <= 9; i++, j--)
document.writeln("a["+i+","+j+"]= " + a[i*10 +j])
Заметьте, что двухмерные массивы ещё не поддерживаются. Этот пример эмулирует двухмерный массив, используя одномерный массив.
Операция delete удаляет объект, свойство объекта или
элемент массива по специфицированному индексу. Синтаксис таков:
delete objectName
delete objectName.property
delete objectName[index]
delete property // верно только внутри оператора with
где objectName это имя объекта, property это существующее
свойство, а index это целое число - место элемента в массиве.
Четвёртая форма верна только внутри оператора with при удалении свойства объекта.
Можно использовать операцию delete для удаления
переменных, объявленных неявно, но не переменных, объявленных оператором var.
Если операция delete выполнена успешно, она устанавливает
свойство или элемент в undefined. Операция delete возвращает true, если операция
возможна, и false - если операция невозможна.
x=42
var y= 43
myobj=new Number()
myobj.h=4 // создаёт свойство h
delete x // возвращает true (может
удалить, если х объявлена неявно)
delete y // возвращает false (не может
удалить, если у объявлена через var)
delete Math.PI // возвращает false (не может удалить предопределённое свойство)
delete myobj.h // возвращает true (может удалить свойство, определённое
пользователем)
delete myobj // возвращает true (может удалить, если myobj
объявлен неявно)
Если Вы удаляете элемент массива, размер массива не изменяется.
Например, если удалить a[3], a[4] всё ещё остаётся a[4], а a[3] станет undefined.
Если операция delete удаляет элемент массива, этот элемент
больше не присутствует в массиве. В следующем примере trees[3] удаляется с
помощью delete.
trees=new Array("redwood","bay","cedar","oak","maple")
delete trees[3]
if (3 in trees) {
// это не будет выполняться
}
Если Вы хотите, чтобы элемент массива существовал, но имел
значение undefined/неопределённое, используйте ключевое слово undefined вместо
операции delete. В следующем примере элементу trees[3] присваивается значение undefined,
но элемент массива продолжает существовать:
trees=new Array("redwood","bay","cedar","oak","maple")
trees[3]=undefined
if (3 in trees) {
// это будет выполняться
}
Операция in возвращает true, если специфицированное
свойство имеется в специфицированном объекте. Синтаксис таков:
propNameOrNumber in objectName
где propNameOrNumber это строка или числовое выражение,
представляющее имя свойства или индекс массива, а objectName это имя объекта.
Некоторые примеры использования операции in:
// Массивы
trees=new Array("redwood","bay","cedar","oak","maple")
0 in trees // возвращает true
3 in trees // возвращает true
6 in trees // возвращает false
"bay" in trees // возвращает false (Вы обязаны
специфицировать число индекса,
//
а не значение, находящееся по этому индексу)
"length" in trees // возвращает true (length это Array-свойство)
// Предопределённые объекты
"PI" in Math // возвращает true
myString=new String("coral")
"length" in myString // возвращает true
// Специальные объекты
mycar = {make:"Honda",model:"Accord",year:1998}
"make" in mycar // возвращает true
"model" in mycar // возвращает true
Операция instanceof возвращает true, если
специфицированный объект имеет специфицированный тип объекта. Синтаксис:
objectName instanceof objectType
где objectName это имя объекта, сравниваемого с objectType,
а objectType это тип объекта, такой как Date или Array.
Используйте instanceof, если Вам нужно подтвердить тип
объекта на этапе прогона. Например, при отлове исключений Вы можете выполнить
ветвление по разным вариантам кода обработки исключений, в зависимости от типа вызываемого исключения.
Например, следующий код использует instanceof для
определения того, является ли theDay Date-объектом. Поскольку theDay это Date-объект,
операторы в операторе if выполняются.
theDay=new Date(1995, 12, 17)
if (theDay instanceof Date) {
// выполняемые операторы
}
Вы можете использовать операцию new для создания
экземпляра объекта пользовательского типа или экземпляра одного из
предопределённых типов объекта: Array, Boolean, Date, Function, Image, Number, Object, Option, RegExp
или String. На сервере Вы можете также использовать её с DbPool, Lock, File или SendMail.
Используйте new так:
objectName = new objectType ( param1 [,param2] ...[,paramN] )
Вы можете также создать объекты, используя инициализаторы
объектов, как описано в "Использовании Инициализаторов Объектов".
См. new в книге
ЯдроJavaScript. Справочник.
Ключевое слово this предназначено для обращения к текущему
объекту. В общем, this ссылается на вызывающий объект в методе. Используйте this так:
Предположим, функция 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)">
Пример 2.
При соединении со свойством формы, this может ссылаться на родительскую форму
текущего объекта. В следующем примере форма myForm содержит Text-объект и кнопку.
Если пользователь щёлкает на кнопке, значением Text-объекта становится имя формы.
Обработчик onClick кнопки использует this.form для обращения к родительской форме myForm.
<FORM NAME="myForm">
Form name:<INPUT TYPE="text" NAME="text1" VALUE="Beluga">
<P>
<INPUT NAME="button1" TYPE="button" VALUE="Show Form Name"
onClick="this.form.text1.value=this.form.name">
</FORM>
Операция typeof используется одним из следующих способов:
1. typeof operand
2. typeof (operand)
Операция typeof возвращает строку, указывающую тип
невычисленного операнда.
operand это строка, переменная, ключевое слово или объект, тип которого
возвращается. Скобки не обязательны.
Предположим, Вы определяете следующие переменные:
var myFun = new Function("5+2")
var shape="round"
var size=1
var today=new Date()
Операция typeof возвращает для этих переменных следующие результаты:
typeof myFun is function
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 используется одним из следующих способов:
1. void (expression)
2. void expression
Операция void специфицирует выражение, вычисляемое без
возвращения значения.
expression это вычисляемое выражение JavaScript. Скобки вокруг выражения не
обязательны, но хорошим стилем является их использование.
Можно использовать оператор void для специфицирования
выражения как гипертекстовой ссылки. Выражение вычисляется, но не загружается вместо текущего документа.
Следующий код создаёт гипертекстовую ссылку, которая
ничего не делает, если пользователь щёлкает на ней. Если пользователь щёлкает на
ссылке, void(0) вычисляется в undefined, что не вызывает никаких действий в JavaScript.
<A href="books-page-javascript-coreguide15-javascript:void(0)">Click here to do nothing</A>
Следующий код создаёт гиперссылку, которая отправляет
форму, если пользователь щёлкает на ссылке.
<A href="books-page-javascript-coreguide15-javascript:void(document.form.submit())">
Click here to submit</A>
Приоритет операций определяет порядок выполнения
операций при вычислении выражения. Вы можете переопределить порядок выполнения путём использования скобок.
В таблице описан приоритет операций от низшего к высшему.
Тип Операции | Операции |
---|---|
, | |
= += -= *= /= %= <<= >>= >>>= &= ^= |= | |
?: | |
|| | |
&& | |
| | |
^ | |
& | |
== != === !== | |
< <= > >= in instanceof | |
<< >> >>> | |
+ - | |
* / % | |
! ~ - + ++ -- typeof void delete | |
() new | |
. [] |
Copyright © 2000 Netscape Communications Corp.
Все Права Зарезервированы.
Дата последнего обновления 28 сентября 2000 года.
|