Операция декремента используется так:
var-- или --var
Эта операция выполняет декремент (вычитает 1) операнда и возвращает его значение. Если это постфикс, когда операция находится после операнда (например, x--), возвращается значение, которое было до выполнения декремента. Если используется префикс (например, --x), возвращается значение, полученное после выполнения декремента.
Например, если x равен 3, оператор y = x-- устанавливает в y значение 3 и выполняет декремент x до 2. Если x равен 3, оператор y = --x выполняет декремент x до 2 и устанавливает в переменную y значение 2.
Операция унарного отрицания находится впереди операнда и выполняет его отрицание. Например, y= -x отрицает (меняет знак) значения x и присваивает его переменной y; то есть, если x равен 3, y получает значение -3, а значение x остаётся равным 3.
Арифметические операции принимают в качестве операндов числовые значения (литералы или переменные) и возвращают единственное числовое значение. Стандартные арифметические операции: сложение (+), вычитание (-), умножение (*) и деление (/).
Реализованы в | JavaScript 1.0 |
Версия ECMA | ECMA-262 |
Эти операции работают так же, как и в большинстве других языков программирования, за исключением операции /, которая возвращает в JavaScript результат (с плавающей точкой) деления, а не округлённый результат, как в C или Java. Например:
1/2 //в JavaScript возвращает 0.5Операция delete удаляет объект, свойство объекта или элемент массива по специфицированному индексу.
Реализована в | JavaScript 1.2, NES 3.0 |
Версия ECMA | ECMA-262 |
В JavaScript имеются операции присвоения, сравнения, арифметические, побитовые/bitwise, логические, строковые и специальные. В этой главе рассматриваются эти операции и содержится информация о приоритете операций.
В таблице дано резюме по операциям JavaScript.
Арифметические | + | (Сложение) Складывает два числа. |
++ | (Инкремент) Прибавляет 1 к переменной, представляющей число (возвращая новое или старое значение переменной). | |
- | (Унарное отрицание, вычитание) Как унарная операция отрицает значение аргумента. Как бинарная - вычитает второй аргумент из первого. | |
-- | (Декремент) Вычитает 1 из переменной, представляющей число (возвращая новое или старое значение переменной). | |
* | (Умножение) Перемножает два числа. | |
/ | (Деление) Делит одно число на другое. | |
% | (Modulus) Вычисляет целочисленный остаток от деления двух чисел. | |
Строковые | + | (Сложение строк/Конкатенация) Объединяет две строки. |
+= | Объединяет две строки и присваивает результат первому операнду. | |
Логические | && | (Логическое И) Возвращает первый операнд, если он может быть конвертирован в false; иначе возвращает второй операнд. При использовании с Булевыми значениями && возвращает true, если оба операнда true; иначе возвращает false. |
|| | (Логическое ИЛИ) Возвращает первый операнд, если он может быть конвертирован в false; иначе возвращает второй операнд. При использовании с Булевыми значениями || возвращает true, если любой из операндов true; если оба false, возвращает false. | |
! | (Логическое НЕ) Возвращает false, если единственный операнд может быть конвертирован в true; иначе возвращает true. | |
Побитовые | & | (Побитовое И) Возвращает 1 в каждой битовой позиции, если биты обоих операндов равны единице. |
^ | (Побитовое исключающее ИЛИ) Возвращает 1 в каждой битовой позиции, если бит одного, но не обоих операндов равен 1. | |
| | (Побитовое ИЛИ) Возвращает 1 в битовой позиции, если бит любого операнда равен 1. | |
~ | (Побитовое НЕ) Инвертирует биты операнда. | |
<< | (Сдвиг влево) Сдвигает влево первый операнд, в двоичном представлении, на количество битов, специфицированное вторым операндом, заполняя справа нулями. | |
>> | (Сдвиг вправо с сохранением знака) Сдвигает вправо первый операнд, в двоичном представлении, на количество битов, специфицированное вторым операндом, отбрасывая сдвинутые биты. | |
>>> | (Сдвиг вправо с заполнением нулями) Сдвигает вправо первый операнд, в двоичном представлении, на количество битов, специфицированное вторым операндом, отбрасывая сдвинутые биты и заполняя нулями слева. | |
Операции Присвоения | = | Присваивает значение второго операнда первому операнду. |
+= | Складывает два числа и присваивает результат первому. | |
-= | Вычитает два числа и присваивает результат первому. | |
*= | Умножает два числа и присваивает результат первому. | |
/= | Делит два числа и присваивает результат первому. | |
%= | Вычисляет целочисленный остаток от деления двух чисел и присваивает результат первому. | |
&= | Выполняет побитовое AND и присваивает результат первому операнду. | |
^= | Выполняет побитовое XOR и присваивает результат первому операнду. | |
|= | Выполняет побитовое OR и присваивает результат первому операнду. | |
<<= | Выполняет побитовый сдвиг влево и присваивает результат первому операнду. | |
>>= | Выполняет побитовый сдвиг вправо с сохранением знака и присваивает результат первому операнду. | |
>>>= | Выполняет побитовый сдвиг вправо с заполнением нулями и присваивает результат первому операнду. | |
Операции Сравнения | == | Возвращает true, если операнды равны. |
!= | Возвращает true, если операнды не равны. | |
=== | Возвращает true, если операнды равны и одного типа. | |
!== | Возвращает true, если операнды не равны и/или не одного типа. | |
> | Возвращает true, если левый операнд больше правого. | |
>= | Возвращает true, если левый операнд больше правого или равен ему. | |
< | Возвращает true, если левый операнд меньше. | |
<= | Возвращает true, если левый операнд меньше правого или равен ему. | |
Специальные Операции | ?: | Выполняет простой оператор "if...then...else" |
, | Вычисляет два выражения и возвращает результат второго выражения. | |
delete | Удаляет объект, свойство объекта или элемент по специфицированному индексу в массиве. | |
new | Создаёт экземпляр объекта определённого пользователем типа или одного из встроенных типов. | |
this | Ключевое слово, которое можно использовать для обращения к текущему объекту. | |
typeof | Возвращает строку, указывающую тип невычисленного операнда. | |
void | Специфицирует выражение, вычисляемое без возвращения значения. |
Эта операция сдвигает вправо первый операнд на специфицированное вторым операндом количество бит. Излишние биты, сдвинутые вправо, отбрасываются. Слева заполнение идёт нулями.
Например, 19>>>2 даст 4, поскольку 10011, сдвинутое на два бита вправо даст 100, то есть 4. Для неотрицательных значений сдвиг вправо с заполнением нулями и сдвиг вправо с сохранением знака дают один результат.
Эта операция сдвигает вправо первый операнд на специфицированное вторым операндом количество бит. Излишние биты, сдвинутые вправо, отбрасываются. Копии самых левых битов вставляются слева.
Например, 9>>2 даёт 2, поскольку 1001, сдвинутое на 2 позиции вправо, становится 10, то есть 2. Аналогично, -9>>2 даёт -3, поскольку знак сохраняется.
Операция инкремента выполняется так:
var++ или ++var
Эта операция выполняет инкремент (прибавляет 1) операнда и возвращает его значение. Если это постфикс, когда операция находится после операнда (например, x++), возвращается значение, которое было до выполнения инкремента. Если используется префикс (например, ++x), возвращается значение, полученное после выполнения инкремента.
Например, если x равен 3, то оператор y= x++ устанавливает в y 3 и выполняет инкремент x до 4. Если x равен 3, то оператор y = ++x выполняет инкремент x до 4 и устанавливает в переменную y значение 4.
Стандартные операции равенства (== и !=) сравнивают два операнда без учёта типа. Операции строгого равенства (=== и !==) выполняют сравнение операндов одного типа. Используйте операции строгого равенства если операнды и значения обязаны иметь специфический тип, а также если имеет значение определённый тип операндов. Иначе используйте стандартные операции равенства, которые дают возможность сравнивать два операнда, даже если они имеют разные типы.
Если необходима конвертация типов, JavaScript конвертирует операнды String, Number, Boolean или Object так:
При сравнении числа и строки - строка конвертируется в число. JavaScript пытается конвертировать числовой литерал строки в значение типа Number. Сначала математическое значение получается из числового литерала строки. Затем это значение округляется до ближайшего значения типа Number. Если один из операторов имеет тип Boolean, Boolean-операнд конвертируется в 1, если он true, и в +0, если он false. Если объект сравнивается со строкой или числом, JavaScript пытается вернуть значение по умолчанию для объекта. Делается попытка конвертировать объект в примитивное значение, String в Number, с использованием методов valueOf и toString объекта. Если попытка конвертации терпит неудачу, генерируется ошибка времени выполнения.Логические операции обычно выполняются над Булевыми (логическими) значениями; при этом возвращается Булево значение. Однако операции && и || в действительности возвращают значение одного из специфицированных операндов, поэтому, если эти операции используются с не-Булевыми значениями, они могут возвратить не-Булево значение.
Реализованы в | JavaScript 1.0 |
Версия ECMA | ECMA-262 |
Логические операции описаны в следующей таблице.
&& | expr1 && expr2 | (Логическое AND/И) Возвращает expr1, если может быть конвертировано в false; иначе возвращает expr2. Таким образом, при использовании с Булевыми значениями, && возвращает true, если оба операнда true; иначе возвращает false. |
|| | expr1 || expr2 | (Логическое OR/ИЛИ) Возвращает expr1, если может быть конвертировано в false; иначе возвращает expr2. Таким образом, при использовании с Булевыми значениями, || возвращает true, если хотя бы один из операндов true; если оба false, возвращает false. |
! | !expr | (Логическое NOT/НЕ) Возвращает false, если единственный операнд может быть конвертирован в true; иначе возвращает true. |
Примерами выражений, которые могут быть конвертированы в false, являются те, которые вычисляются в null, 0, пустую строку ("") или undefined.
Хотя операции && и || могут использоваться с не-Булевыми операндами, они (операции) считаются всё же Булевыми, поскольку их return-значения всегда могут быть конвертированы в Boolean.
Сокращённый цикл вычислений. Поскольку логические выражения вычисляются слева направо, они проверяются на возможность "сокращённого/short-circuit" вычисления по следующим правилам:
false && anything сокращённо вычисляется в false. true || anything сокращённо вычисляется в true.Правила логики гарантируют, что эти вычисления всегда будут корректны. Обратите внимание, что часть anything вышеприведённых выражений не вычисляется, поэтому она не оказывает никакого действия на результат.
Эта операция сдвигает влево первый операнд на специфицированное вторым операндом количество бит. Излишние биты, сдвинутые влево, отбрасываются. Справа заполнение идёт нулями.
Например, 9<<2 даёт 36, поскольку 1001, сдвинутое на 2 бита влево становится 100100, что равно 36.
Операция modulus используется так:
var1 % var2Операция modulus возвращает первый операнд modulo второй операнд, то есть var1 modulo var2, как в вышеприведённом операторе, где var1 и var2 это переменные. Функция modulo это целочисленный остаток от деления var1 на var2. Например, 12 % 5 возвращает 2.
Операция new создаёт экземпляр объекта пользовательского типа или объекта одного из встроенных типов, имеющих функцию-конструктор.
Реализована в | JavaScript 1.0 |
Версия ECMA | ECMA-262 |
Поведение стандартных операций сравнения (== и !=) зависит о версии JavaScript.
JavaScript 1.2. Стандартные операции сравнения (== и !=) не выполняют конвертацию типов перед выполнением сравнения. Операции строго равенства (=== и !==) недоступны.
JavaScript 1.1 и более ранние версии. Стандартные операции сравнения (== и !=) выполняют конвертацию типов перед выполнением сравнения. Операции строго равенства (=== и !==) недоступны.
JavaScript 1.0 и 1.1. Операции && и || работают так:
&& | Если первый операнд (expr1) может быть конвертирован в false, операция && возвращает false, а не значение выражения expr1. |
|| | Если первый операнд (expr1) может быть конвертирован в true, операция || возвращает true, а не значение выражения expr1. |
Реализованы в | JavaScript 1.0 |
Версия ECMA | ECMA-262 |
Операции побитового сдвига принимают два операнда: первый операнд сдвигается, а второй специфицирует количество битовых позиций, на которое сдвигается первый операнд. Направление операции сдвига контролируется самой операцией.
Операции сдвига конвертируют операнды в 32-битные целые числа, и возвращают результат того же типа, что у левого операнда.
Операция присвоения присваивает значение левому операнду на основе значения правого операнда.
Реализованы в | JavaScript 1.0 |
Версия ECMA | ECMA-262 |
Базовая операция присвоения это равенство (=), которая присваивает значение правого операнда левому операнду. То есть x = y присваивает значение y переменной x. Другие операции присвоения являются обычно сокращениями стандартной операции, как показано в таблице:
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 |
В нестандартных ситуациях оператор присвоения не идентичен значению из колонки "Значение" Таблицы 5.2. Если левый операнд операции присвоения сам содержит операцию присвоения, он вычисляется только однократно. Например:
a[i++] += 5 //i вычисляется только один разОперация сравнения сравнивает операнды и возвращает логическое значение на основе того, является ли сравнение true.
Реализованы в | JavaScript 1.0
JavaScript 1.3: добавлены операции === и !== |
Версия ECMA | ECMA-262 содержит все операции сравнения, за исключением === и !== |
Операнды могут быть числами или строками. Строки сравниваются на основе стандартного лексикографического (словарного) порядка с использованием Unicode-значений.
Булево значение возвращается как результат сравнения.
Две строки равны, если они имеют одинаковые последовательности символов, одинаковые размеры и одинаковые символы в соответствующих позициях. Два числа равны, если они равны численно (имеют одинаковые числовые значения). NaN не равно ничему, включая само NaN. Положительные и отрицательные нули равны. Два объекта равны, если они ссылаются на один Object. Два Булевых операнда равны, если они оба true или оба false. Типы Null и Undefined равны.В таблице дано резюме по операциям сравнения.
Равно (==) | Возвращает true, если операнды равны. Если операнды имеют разные типы, JavaScript пытается конвертировать операнды в подходящий тип для выполнения сравнения. | 3 == var1 "3" == var1 3 == '3' |
Не равно (!=) | Возвращает true, если операнды не равны. Если операнды имеют разные типы, JavaScript пытается конвертировать операнды в подходящий тип для выполнения сравнения. | var1 != 4 var1 != "3" |
Строго равно (===) | Возвращает true, если операнды равны и одного типа. | 3 === var1 |
Строго не равно (!==) | Возвращает true, если операнды не равны и/или разных типов. | var1 !== "3" 3 !== '3' |
Больше (>) | Возвращает true, если левый операнд больше правого. | var2 > var1 |
Больше или равно (>=) | Возвращает true, если левый операнд больше правого или равен ему. | var2 >= var1 var1 >= 3 |
Меньше (<) | Возвращает true, если левый операнд меньше правого. | var1 < var2 |
Меньше или равно (<=) | Возвращает true, если левый операнд меньше правого или равен ему. | var1 <= var2 var2 <= 5 |
1 В этих примерах принимается, что var1 имеет значение 3, а var2 имеет значение 4. |
Операция "запятая" вычисляет оба операнда и возвращает значение второго операнда.
Реализована в | JavaScript 1.0 |
Версия ECMA | ECMA-262 |
condition |
Выражение, вычисляемое в true или false. |
expr1, expr2 |
Выражения со значениями любого типа. |
expr1, expr2 |
Любые выражения. |
objectName | Имя объекта. |
property | Удаляемое свойство. |
index |
Целое число - индекс массива. |
objectName | Имя нового экземпляра объекта. |
objectType |
Тип объекта. Должна существовать функция, определяющая тип объекта. |
param1...paramN |
Значения свойств объекта. Эти свойства являются параметрами, определёнными для функции objectType. |
Реализованы в | JavaScript 1.0 |
Версия ECMA | ECMA-262 |
Концептуально побитовые логические операции работают так:
Операнды конвертируются в 32-битные целые числа и выражаются сериями битов (0 и 1). Каждый бит первого операнда образует пару с битом второго операнда в этой же позиции: первый с первым, второй со вторым и т.д. Операция выполняется для каждой пары битов, и результат конструируется побитно.Например, двоичное представление 9 выглядит как 1001, а представление 15 - как 1111. Поэтому при выполнении побитовых операций с этими значениями, результаты будут такими:
15 & 9 даёт 9 (1111 & 1001 = 1001) 15 | 9 даёт 15 (1111 | 1001 = 1111) 15 ^ 9 даёт 6 (1111 ^ 1001 = 0110)Побитовые операции рассматривают каждый операнд как набор из 32 битов (0 и 1), а не как десятеричное, 16-ричное или 8-ричное число. Например, 10-ричное число 9 имеет двоичное представление 1001. Побитовые операции выполняются над такими двоичными представлениями чисел, но возвращают стандартные числовые значения JavaScript.
AND | a & b | Возвращает 1 в каждой битовой позиции, где оба бита операндов равны 1. |
OR | a | b | Возвращает 1 в каждой битовой позиции, где один или оба бита операндов равны 1. |
XOR | a ^ b | Возвращает 1 в каждой битовой позиции, где один, но не оба бита операндов равен 1. |
NOT | ~ a | Инвертирует биты операнда. |
Сдвиг влево | a << b | Сдвигает a в двоичном представлении на b битов влево, заполняя справа нулями. |
Сдвиг вправо с сохранением знака | a >> b | Сдвигает a в двоичном представлении на b битов вправо, отбрасывая сдвинутые биты. |
Сдвиг вправо с заполнением нулями | a >>> b | Сдвигает a в двоичном представлении на b битов вправо, отбрасывая сдвинутые биты и заполняя слева нулями. |
В дополнение к операциям сравнения, которые могут использоваться со строковыми значениями, операция конкатенации (+) объединяет две строки в одну, возвращая эту новую строку как результат объединения двух строк-операндов. Например, "my " + "string" возвращает строку "my string".
Реализована в | JavaScript 1.0 |
Версия ECMA | ECMA-262 |
Сокращённый оператор += также может использоваться для конкатенации строк. Например, если переменная mystring имеет значение "alpha", то выражение mystring += "bet" вычисляется в "alphabet" и присваивается переменной mystring.
Ключевое слово this ссылается на текущий объект. Вообще, в теле метода this ссылается на вызывающий объект.
Реализовано в | JavaScript 1.0 |
Версия ECMA | ECMA-262 |
Операция typeof используется двумя способами:
1. typeof operandОперация typeof возвращает строку, указывающую тип невычисленного операнда.
operand это строка, переменная, ключевое слов или объект, тип которых возвращается. Скобки не обязательны.
Реализована в | JavaScript 1.1 |
Версия ECMA | ECMA-262 |
Предположим, Вы определили следующие переменные:
var myFun = new Function("5+2")Операция typeof возвращает для этих переменных следующие результаты:
typeof myFun is objectДля ключевых слов true и null операция typeof возвращает:
typeof true is booleanДля числа или строки операция typeof возвращает:
typeof 62 is numberДля значений свойств операция typeof возвращает тип значения, содержащегося в свойстве:
typeof document.lastModified is stringДля методов и функций операция typeof возвращает:
typeof blur is functionДля предопределённых объектов операция typeof возвращает:
typeof Date is functionУсловная операция - единственная в JavaScript, принимающая три операнда. Эта операция часто используется как аббревиатура оператор if.
Реализована в | JavaScript 1.0 |
Версия ECMA | ECMA-262 |
Операция void используется двумя способами:
1. void (expression)
Операция void специфицирует выражение, вычисляемое без возвращения результата.
expression это вычисляемое выражение JavaScript. Скобки не обязательны, но хорошим стилем будет их использование.
Реализована в | JavaScript 1.1 |
Версия ECMA | ECMA-262 |
Вы можете использовать операцию void для специфицирования выражения как гипертекстовой ссылки. Выражение вычисляется, но не загружается вместо текущего документа.
Следующий код создаёт гиперссылку, которая ничего не делает, если пользователь щёлкает по ней. При щелчке void(0) вычисляется в 0, но не вызывает никаких действий в JavaScript.
<A HREF="javascript:void(0)">Click here to do nothing</A>Следующий код создаёт гиперссылку, которая отправляет форму, если пользователь щёлкает по ссылке.
<A HREF="javascript:void(document.form.submit())">