Meshbeyn / JavaScript

Конспект по Javascript

3 Операторы, выражения и приоритеты операторов

Операторы - это встроенные в язык команды, позволяющие выполнять некоторые действия над переменными и значениями.

Выражение - это последовательность значений, операторов и других элементов языка, составленная по специальным правилам. Каждый язык имеет список правил составления выражений. В JavaScript они большей частью похожи на все остальные C-подобные языки. Каждому выражению соответствует синтаксическое дерево, составленное по синтаксическим правилам языка. Каждое синтаксическое правило указывает порядок и тип выражений и операторов, составляющих новое сложное выражение. Также оно указывает тип получившегося выражения и соответствующего ему дерева. Это дерево затем можно вставить в дерево для другого правила, получая все более сложные выражения.

Если парсер не может составить правильное дерево, то выражение составлено неверно и парсер выдаст ошибку. Например, текст "=3+2" неверное выражение, так как слева от оператора присваивания должно быть выражение записываемой переменной, поля объекта или массива.

Текст "a = 3 + 2" - это составное выражение присваивания. Оператор = является корнем дерева. a является его левым потомком "левым выражением" (адресатом). 3 + 2 является правым потомком (значением).

Выражение "a" - это простое выражение доступа к переменной. В данном случае для записи.

Выражение "3 + 2" - это составное выражение сложения. Оператор + является корнем этого дерева и непосредственным правым потомком оператора =. "3" и "2" являются потомками этого узла.

Выражения "3" и "2" - это простые выражения - целочисленные литералы.

Синтаксическое дерево выражения a = 3 + 2 = a + 3 2

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

Простое присваивание =

Бинарный оператор, справа от которого находится выражение с единственным результатом, а слева - переменная, поле объекта или элемент массива. Присваивание также возвращает полученное значение, так что его можно использовать в цепочке. a = b = c = 1 + 2;

Составное присваивание

Это краткая запись присваивания с бинарным оператором, где цель используется слева в самом операторе. Соответствующий бинарный оператор дописывается перед знаком =. Например:

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

Унарные - ++ --

Унарный минус стоит перед численным выражением и меняет его знак. Унарный инкремент ++ и декремент -- увеличивают или уменьшают значение переменной или поля на 1 и могут стоять слева или справа от переменной. Если оператор стоит слева, он изменяет значение переменной и возвращает новое значение. Если оператор стоит справа, он меняет значение переменной, но возвращает первоначальное значение.

Бинарные + - * / %

Эти операторы выполняют знакомые всем математические операции. Оператор взятия по модулю % делит первое число на второе целое количество раз и возвращает остаток.

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

Логические операторы используются для создания булевых выражений, которые обычно используются для приятия решений о ходе выполнения программы.

Унарный оператор отрицания !

Логическое отрицание ставится перед булевым выражением и меняет его истинность.

Бинарные операторы сравнения < > <= >= == != === !==

Большинство операторов перед сравнением приводят операнды к общему типу. Строгое равенство === и строгое неравенство !== могут использоваться, когда такое приведение нежелательно. Примеры равных выражений с точки зрения оператора ==

Логическое И &&, логическое ИЛИ ||

Эти операторы объединяют два булевых выражения в одно. Оператор && возвращает true если оба операнда равнозначны true. Оператор || возвращает true если хоть один из операндов равнозначен true.

Тернарный условный оператор ?:

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

a = (b < 4) ? 3 : 5;

равнозначен записи

if(b < 4) 
    a = 3; 
else 
    a = 5;

Битовые операторы

Унарная битовая инверсия ~

Ставится перед численным выражением и инвертирует все биты числа.

Бинарные битовые сдвиги <<  >>  >>>

Оператор << сдвигает биты числа влево на указанное количество бит. При этом левые биты исчезают, а справа дописываются нули. Это соответствует умножению на 2 в определенной степени.

Операторы >> и >>> сдвигают биты числа вправо на указанное число бит. При этом правые биты исчезают, левые зависят от оператора. >> дописывает знак числа (копирует самый левый бит). >>> дописывает 0.

Битовые логические операторы & | ^

Аргументы приводятся к целым числам, после чего к соответствующим битам аргументов применяется операция AND, OR или XOR. Получившееся число возвращается.

Другие операторы

Оператор ,

Выполняет выражения по очереди. Иногда используется в цикле for.

for (i = 0, j = 0; i < 10; i++, j++)

Оператор void

Ставится перед выражением и подменяет его значение на undefined.

Оператор delete

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

Оператор new

Создает новый объект и вызывает его конструктор.

Оператор typeof

Возвращает строку с типом аргумента. Может записываться как функция или как префиксный оператор. В зависимости от типа аргумента возвращает следующие 6 значений: number, string, boolean, object, function, undefined.

Оператор instanceof

Бинарный оператор, возвращающий true, если объект содержит класс в цепочке прототипов. Левым аргументом указывается объект, правым - класс.

Оператор in

Бинарный оператор, возвращающий true, если указанное свойство содержится в объекте. Левым аргументом указывается свойство, правым - объект.

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

При вычислении выражения порядок выполнения операторов зависит от их приоритетов. Например, умножение выполняется перед сложением. А перед тем, как применить оператор со скобками, необходимо выполнить все операторы внутри скобок.

Каждый язык определяет, в каком порядке должны выполняться операторы. Это таблица приоритетов операторов JavaScript.

ПриоритетОператорыОписание
1. [] ()Разыменование поля, получение элемента массива, вызов функции, группировка выражений
2++ -- - ~ ! delete new typeof voidУнарные операторы, удаление полей, создание объектов, возвращение типов и неопределенных значений
3* / %Умножение, деление, деление по модулю
4+ -Сложение, вычитание, конкатенация строк
5<< >> >>>Битовый сдвиг
6< <= > >= instanceofОрдинальное сравнение, проверка наследования
7== !== === !==Проверка на равенство и на строгое равенство
8&Побитовое И
9^Побитовое исключающее ИЛИ
10|Побитовое ИЛИ
11&&Логическое И
12||Логическое ИЛИ
13?:Тернарный условный оператор
14= OP=Присваивание, присваивание с оператором
15,Множественное выражение