Операторы

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

 

 Операторы - это математические символы и/или определённые слова, позволяющие оперировать (совершать действия) с переменными - складывать, вычитать, присваивать, сравнивать, отрицать и так далее. Так же есть операторы, которые управляют программой.

 

 
Оператор Значение Пример
Арифметические операторы
+ Сложение чисел или текстовых строк. Числа так же могут быть представлены в виде переменных, которые их содержат.

a = 1 + 2

a = a + 2

var Tx = "text1" + "text2"

- Выполняет вычитание второго числа из первого. a = 2 - 1
/ Выполняет деление первого числа на второе. a = 4 / 2
* Выполняет умножение чисел. a = 2 * 2
** Возведение в степень. Значение, расположенное слева, возводится в степень, указанную в правом значении. Если значение слева отрицательное, его необходимо указывать в скобках.

 5 ** 3 (результат: 125)

(-5) ** 3 (результат: -125)

% Возвращает целый остаток деления. Результатом выражения в примере, приведённом справа, будет 5.

45 % 8

Операторы присваивания
= Выполняет функцию присвоения. Обратите внимание: это не математический знак равенства, а оператор присвоения, который присваивает переменной слева значение, стоящее (или получаемое) справа.

var Text = 'Текст'

a = 1 + 2

+=

Присваивание со сложением. Значение переменной слева суммируется со значением (или значением переменной) справа и присваивается переменной слева. Соответственно, слева может находится только переменная, а не число.

Данный оператор так же может быть использован для сложения двух строк (так же, как и "+").

 

a += 10

тоже самое, что и

a = a + 10

-= Вычитание с присвоением. Из значения переменной слева вычитается значение (или значение переменной) справа и присваивается переменной слева. Соответственно, слева может находится только переменная, а не число. 

a -= 10

тоже самое, что и

a = a - 10

*= Присваивание с умножением. Значение переменной слева умножается на значение (или значение переменной) справа и присваивается переменной слева. Соответственно, слева может находится только переменная, а не число. 

a *= 10

тоже самое, что и

a = a * 10

/= Деление с присвоением. Значение переменной слева делится на значение (или значение переменной) справа и присваивается переменной слева. Соответственно, слева может находится только переменная, а не число. 

a /= 10

тоже самое, что и

a = a / 10

%= Присваивание по модулю. Значение переменной слева делится на значение (или значение переменной) справа, после чего переменной слева присваивается целый остаток от деления. В примере справа переменная a получит значение 5.

var a = 40

a %= 8

Деструктурирующее присваивание
Эта тема подробно рассмотрена в главе "Деструктурирующее присваивание"   
Операторы равенства
== Сравнение с преобразованием операндов. Могут сравниваться значения разных типов; при необходимости значения могут быть преобразованы в один тип*. В приведённом примере значение будет преобразовано в общий тип, затем произведено сравнение; результат сравнения - true.

a = 25

b = "25"

a == b

=== Строгое сравнение. Сравнивает два  значения строго одного типа*. Если значения равны, возвращается true, если неравны - false.  a === b
!=

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

В примере справа значения равны, но результат выражения - false.

"25" != 25
!==

Оператор строгого сравнения и отрицания. Данный оператор сравнивает два значения строго одного типа и затем меняет результат на противоположный.

В примере справа во второй строке производится сначала сравнение значения переменной Age, расположенной слева, с числом 25, расположенным справа; несмотря на то, что значения равны, в результате будет получено значение false, так как применён оператор отрицания !.

    Age = 25;
  2  
  Age !== 25;

Оператор отрицания
!

Оператор отрицания. Возвращает обратное значение. В примере, приведённом справа, выражение в строке 2 выдаст значение false, так значение, полученное в скобках - true.

  1    var Age = 25;
  2  
  !(Age === 25);

Операторы сравнения
> Выдаёт значение true если значение слева больше, чем значение справа. a > b
>= Выдаёт значение true если значение слева больше или равно значению справа. a >= b
< Выдаёт значение true если значение слева меньше, чем значение справа. a < b
<= Выдаёт значение true если значение слева меньше или равно значению справа. a <= b
Инкремент и декремент   
 ++

Инкремент.

Если ++ идёт перед операндом, то возвращается значение, увеличенное на единицу, а так же увеличивается значение самого операнда. Результатом примера 1 будет a=11, b=11, т.е. переменная b получит увеличенное значение (11), а так же сам операнд (а) будет увеличен на единицу.

              -------------------------

Если ++ идёт после операнда, то сначала возвращается значение самого операнда, а затем операнд увеличивается на единицу. Результатом примера 2 будет a=10, b=11; т.е. переменная b получит изначальное значение операнда (10), а сам операнд будет увеличен на единицу.

 

 Пример 1.

  • a = 10
  • b = ++a

// Результат:

// a = 11,  b = 11

         ----------------

Пример 2.

  • a = 10
  • b = a++

// Результат:

// a = 11,  b = 10

--   

Декремент.

Если -- идёт перед операндом, то возвращается значение, уменьшенное на единицу, а так же уменьшается значение самого операнда. Результатом примера 1 будет a=9, b=9, т.е. переменная b получит уменьшенное значение (9), а так же сам операнд (а) будет уменьшен на единицу.

              -------------------------

Если -- идёт после операнда, то сначала возвращается значение самого операнда, а затем операнд уменьшается на единицу. Результатом примера 2 будет a=10, b=9; т.е. переменная b получит изначальное значение операнда (10), а вот сам операнд будет уменьшен на единицу.

 

Пример 1.

  • a = 10
  • b = --a

// Результат:

// a = 9,  b = 9

         ----------------

Пример 2.

  • a = 10
  • b = a--

// Результат:

// a = 9,  b = 10

Унарный "плюс"   
 +  Унарный + устанавливается перед операндом и преобразовывает его в число. 

 a = +"8"

 b = +false

// Результат:

//a = 8, b = 0

Унарный "минус"   
- Унарный - , поставленный в выражении перед операндом, возвращает его отрицательное значение, не меняя при этом значение самого операнда (см. пример справа). 

 a = 10

 b = -a

// Результат:

//a = 10, b = -10

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

 Логическое "и".

Возвращает значение первого операнда (a1) если его можно преобразовать в "false"; если же этого сделать нельзя, то будет возвращёно значение второго операнда. Например,  если первый операнд является текстом, то его нельзя преобразовать в "false"; соответственно, будет возвращено значение второго операнда.  

  a1 && b1
|| 

Логическое "или".

Возвращает значение первого операнда (a1) если его можно преобразовать в "true"; если же этого сделать нельзя, то будет возвращёно значение второго операнда.  Например, если первый операнд является текстом, то его можно преобразовать в "true"; соответственно, будет возвращено значение первого операнда. 

 

 a1 || b1

Логическое "не".

Меняет значение "true" на "false" и наоборот.

 !"текст"

// вернёт "false"

   Тернарный оператор
?  : 

 Выбирает значение в зависимости от условия. Синтаксис:

(Условие) ? ЗначениеА : ЗначениеВ

Если заданное условие выполняется, то принимается ЗначениеА, если не выполняется - ЗначениеВ.

 1  a = 25;
 2 
 b = (a=25) 1 : 0 ;

// b получит значение 1

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

Синтаксис:    Свойство in Объект 

Проверяет наличие указанного в выражении Свойства в Объекте. Если такое свойство есть, возвращает значение "true". В качестве Свойства могут быть так же указаны и индексы массива (но не значения этих индексов!).

 
instanceof 

 Синтаксис:   Объект instanceof ТипОбъекта

Проверяет соответствие указанного в выражении объекта указанному типу. Если тип соответствует, будет возвращено значение "true".

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

Удаляет объекты, свойства, элементы массива (указывается индекс). 

Стоит иметь в виду, что данный оператор может удалять переменные и объекты, только объявленные неявно.

При применении оператора свойство меняется на undefined.

Оператор возвращает "true", если операция возможна и "false" - если невозможна. 

 
typeof

 Данный оператор возвращает тип операнда. Операнд может быть подставлен в скобках или без них (см. примеры).

Важно:

  1. Для свойств будет возвращён тип значения свойства.
  2. Для true будет возвращено значение Boolean.
  3. Для null будет возвращено значение object.
  4. Для функций, а так же методов возвращается значение function.

 var a = typeof 10;

var b = typeof ("text")

void  Определяет выражение, которое должно быть вычислено без результата.  var A = void (выражение)

----------------------------------------------

* Правила сравнения

  • При сравнении числа и строки числовое значение в строке преобразуется в число.
  • Сравнение двух разных объектов всегда даёт false.
  • Значение false приравнивается к 0, значение true - к 1.
  • При сравнении объекта с числом или строкой JS получает значение для этого объекта, преобразует его при помощи методов toString и valueOf (если это возможно).

 

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

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

  Тип

Порядок обработки (ассоциативность)

Оператор
20 Группировка ( )
19 Доступ к свойствам .
Доступ к свойствам [ ]
New (новый объект)    new Объект(***)
Вызовы функций    *** (***)
18 New (без аргументов) new *** 
17 Постфиксный инкремент и декремент   х++  и  х-- 
16 Логическое отрицание
Побитовое отрицание
Унарный плюс
Унарный минус  
Префиксный инкремент и декремент   ++x  и  --x 
typeof typeof
void void
delete delete
await await
15 Операция возведения в степень **
14 Умножение *
Деление /
Целый остаток деления %
13 Сложение +
Вычитание -
12 Побитовый сдвиг влево <<
Побитовый сдвиг вправо >>
Сдвиг вправо с заполнением нулей >>>
11 Меньше, меньше или равно <     <=
Больше, больше или равно >     >=
in in
instanceof instanceof
10 Сравнение ==
Сравнение и отрицание !=
Строгое сравнение ===
Строгое сравнение и отрицание !==
 9 Побитовое И &
 8 Побитовое исключающее ИЛИ ^
 7 Побитовое ИЛИ |
 6 Логическое И &&
 5 Логическое ИЛИ ||
 4 Тернарный оператор ?   :
 3 Присваивание все варианты
 2 yield yield
yield* yield*
 1 Запятая, последовательность ,

Обозначения:

     Выполнение слева направо

     Выполнение справа на налево

       Не определено

 

 Будьте предельно внимательны при работе с переменными разных типов!