8. Выражения и операции в JavaScript.
8.1. Выражения.
Выражение - совокупность допустимых литералов,
переменных и операторов языка, предназначенных для выполнения операций над ними
и сведения к одному значению. Значением может быть число, строка или логическое
значение. Принципиально имеются два типа выражения: которые присваивают
какое-либо значение переменной, или просто являются
значением.
Например,
x =
7
является выражением, присваивающим переменной х значение 7.
В
другом случае, выражение
3 +
4
вычисляет значение 7 и не производит никаких присваиваний.
В JavaScript имеется несколько типов выражений:
- арифметические: результатом является
числовое значение,
- строковые:
результатом является строка, например: "Fred" или
"234",
- логические: вычисляют значения
true или false.
Специальное ключевое слово null задает нулевое значение. Если переменной не было присвоено никакого значения, она является неопределенной (undefined) и применение ее в программе приведет к диагностике об ошибке.
8.1.1. Условные выражения.
Условные выражения могут принимать одно из двух
значений в зависимости от выполнения условия.
Синтаксис условного выражения:
(condition) ? val1 : val2
Если условие принимает значение true,
выражение получает значение val1, в противном случае - значение
val2.
Например:
status = (age >= 18) ? "adult" : "minor"
8.2. Операторы присваивания (=, +=, -=, *=, /=)
Операторы присваивания назначают левому операнду
значение правого операнда. Основной оператор присваивания - равенство (=). Таким
образом, оператор x = y присваивает переменной 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,
x |= y означает x = x | y.
8.3. Операции в JavaScript.
В JavaScript имеются арифметические, строковые и
логические операции.
Они могут быть бинарными
и унитарными. В бинарных операциях присутствуют два операнда, один до, а другой
после оператора:
operand1 operator operand2
Например: 3 + 4 or x * y
Унитарные операции содержат один операнд, до или после оператора:
operator operand
или
operand operator
Например: x++ или ++x.
8.3.1. Арифметические операции.
Арифметические операции используют числовые значения операндов (или литералы либо переменные) и результатом выполнения будет единственнное числовое значение.
Стандартные арифметические операции.
Стандартными арифметическими операциями являются :сложение (+), вычитание (-), умножение (*) и деление (/).
Модуль числа
(%).
Формат оператора:
var1 % var2
Например, результатом операции 12 % 5 будет 2.
Инкрементация
(++)
Формат оператора: var++ или
++var
Операция добавляет 1 к значению операнда. Существуют
две формы операции инкрементации: префиксная (++var) и суффиксная (var++). В
префиксной формк происходит инкрементация операнда и возвращение результата
операции. В суффиксной форме инкрементация операнда выполняется после возвращени
результата операции.
Примеры:
1. x =
3
y = x++
Значением y будет 3, а значением x - 4.
2. x =
3
y = ++x
Значением x и y будет 4.
Декрементация
(--)
Формат оператора: var-- или
--var
Операция вычитает 1 из операнда. Существуют две
формы операции декреиентации: префиксная (--var) и суффиксная (var--). В
префиксной формк происходит декреиентация операнда и возвращение результата
операции. В суффиксной форме декрементация операнда выполняется после возвращени
результата операции.
Примеры:
1. x =
3
y = x--
Значением y будет 3, а значением x - 2.
2. x =
3
y = ++x
Значением x и y будет 2.
Отрицание (-).
Операция меняет знак операнда на противоположный.
Пример:
y = -x
8.3.1.1. Битовые операции.
Битовые операции расматривают операнды как набор битов ( значений 0 и 1), но возвращают результат в стандартном для JavaScript представлении числовых значений.
Логические битовые операции.
Концептуально логические битовые операции работают
следующим образом:
- операнды конвертируются в
32-битные целые числа,
- выполняются операции
попарно для соответствующих битов обоих операндов (первый с первым, второй со
вторым и т. д. ).
Операции:
& (AND) возвращает значение 1, если оба бита равны
1,
| (OR) возвращает значение 1, если хотя бы один бит
равен 1,
^ (XOR) возвращает значение 1, если ни один их
битов не равен 1.
Пример: двоичное представление 9 - 1001, а 15 - 1111.
15 & 9 = 9 (1111 & 1001 =
1001)
15 | 9 = 15 (1111 | 1001 =
1111)
15 ^ 9 = 6 (1111 ^ 1001 = 0110)
8.3.1.2. Операции сдвига.
Операции сдвига требуют два операнда: первый - сдвигаемй операнд и второй - указатель сдвига (числа сдвигаемых битов). Направление сдвига определяется выбранным знакои операции. Операции сдвига конвертируют значения операндов к 32-битному целому представлению, а результат сдвига возвращается в формате первого операнда.
Операция левого сдвига (<<).
Операция сдвигает биты первого операнда влево на
число позиций, указанных во втором операнде. Значения выдвинутых битов
пропадают, а на место сдвинутых битов справа записываются нули.
Например,
9<<2 = 36.
Операция правого сдвига с расширением знака (>>).
Операция сдвигает биты первого операнда вправо на
число позиций, указанных во втором операнде. Значения выдвинутых битов
пропадают, а на место сдвинутых битов слева записывается значение левого
"знакового" бита операнда.
Пример.
9 >> 2 = 2
-9 >> 2
= -3
Операция правого сдвига без расширения знака (>>>).
Операция сдвигает биты первого операнда вправо на
число позиций, указанных во втором операнде. Значения выдвинутых битов
пропадают, а на место сдвинутых битов слева записываются нули.
Пример.
19 >>> 2 = 4.
8.3.2. Логические операции.
Логические операции воспринимают операнды как логические значения true или false. Результатом также будeт логическое значения.
And (&&)
Формат: expr1 && expr2
Логическая операция "and" возвращает значение true, если оба логические выражения expr1и expr2 есть true, иначе - false.
Or (||)
Формат: expr1 || expr2
Логическая операция "or" возвращает значение true, если хотя бы одно из логических выражений expr1 или expr2 есть true. Если оба выражения есть false, то и результатом будет - false.
Not (!)
Формат: !expr
Логическая операция "not" - унитарный оператор, который дает отрицание его операнду.Таким образом, если значение expr есть true, результатом будет false, а если значение expr есть false , результатом будет true.
Примеры.
1. if( (a < 10) && (c >= 20) )
{
..... }
2. if(!confirm("Are you sure?")
{........ }
8.3.2.1. Операции сравнения (= =, >, >=, <, <=, !=).
Операции сравнивают оба своих операнда и результатом сравнения будет логическое значение true или false. Операндами могут быть числовые или строковые значения.
Операции::
- равно (= =): возвращаемое значение будет true, если операнды
равны,.
- не равно (!=): возвращаемое значение будет true, если
операнды не равны
- больше (>): возвращаемое значение будет
true, если левый операнд больше правого,
- больше или равно
(>=): возвращаемое значение будет true, если левый операнд больше
правого или равен ему,
- меньше (<): возвращаемое значение будет
true, если левый операнд меньше правого,
- меньше или равно
(<=): возвращаемое значение будет true, если левый операнд меньше
правого или равен ему.
Пример:
if( (age <= 18) || ( height <
150)
alert("You are too young!")
8.3.3. Строковые операции.
В дополнение к операциям сравнения к строковым
значениям применяется операция конкатенации (+), выполняющая слияние двух строк
в одну. Возвращаемым значением операции будет новая
строка.
Например,
операция
"my " +
"string"
возвращает значение "my string"
Существует укороченная форма операции конкатенации
(+=).
Например, если переменная
mystring содержит строку "alpha", то выражение
mystring += "bet"
присвоит переменной mystring значение "alphabet".
8.4. Старшинство операций.
Старшинство операций заключается в приоритете
выполнения действий в сложных выражениях. Возможно, используя скобки, изменить
последовательность выполнения операций.
Старшинство операций в порядке
возрастания приоритетов:
запятая ,
присвоение = += -= *= /= %= <<= >>= >>>=
&= ^= |=
проверка условия ?
логическое or ||
логическое and
&&
двоичное or |
двоичное xor ^
двоичное and &
сравнение
== !=
соотношение < <= > >=
двоичный сдвиг << >>
>>>
сложение/вычитание + -
умножение/деление * /
%
отрицание/инкрементация ! - ++ --