Конспект по Javascript
3 Операторы, выражения и приоритеты операторов
Операторы - это встроенные в язык команды, позволяющие выполнять некоторые действия над переменными и значениями.
Выражение - это последовательность значений, операторов и других элементов языка, составленная по специальным правилам. Каждый язык имеет список правил составления выражений. В JavaScript они большей частью похожи на все остальные C-подобные языки. Каждому выражению соответствует синтаксическое дерево, составленное по синтаксическим правилам языка. Каждое синтаксическое правило указывает порядок и тип выражений и операторов, составляющих новое сложное выражение. Также оно указывает тип получившегося выражения и соответствующего ему дерева. Это дерево затем можно вставить в дерево для другого правила, получая все более сложные выражения.
Если парсер не может составить правильное дерево, то выражение составлено неверно и парсер выдаст ошибку. Например, текст "=3+2" неверное выражение, так как слева от оператора присваивания должно быть выражение записываемой переменной, поля объекта или массива.
Текст "a = 3 + 2" - это составное выражение присваивания. Оператор = является корнем дерева. a является его левым потомком "левым выражением" (адресатом). 3 + 2 является правым потомком (значением).
Выражение "a" - это простое выражение доступа к переменной. В данном случае для записи.
Выражение "3 + 2" - это составное выражение сложения. Оператор + является корнем этого дерева и непосредственным правым потомком оператора =. "3" и "2" являются потомками этого узла.
Выражения "3" и "2" - это простые выражения - целочисленные литералы.
Операторы и выражения присваивания
Простое присваивание =
Бинарный оператор, справа от которого находится выражение с единственным результатом, а слева - переменная, поле объекта или элемент массива. Присваивание также возвращает полученное значение, так что его можно использовать в цепочке. a = b = c = 1 + 2;
Составное присваивание
Это краткая запись присваивания с бинарным оператором, где цель используется слева в самом операторе. Соответствующий бинарный оператор дописывается перед знаком =. Например:
x += 3
равнозначноx = x + 3
x *= a + b
равнозначноx = x * (a + b)
Арифметические операторы
Унарные - ++ --
Унарный минус стоит перед численным выражением и меняет его знак. Унарный инкремент ++ и декремент -- увеличивают или уменьшают значение переменной или поля на 1 и могут стоять слева или справа от переменной. Если оператор стоит слева, он изменяет значение переменной и возвращает новое значение. Если оператор стоит справа, он меняет значение переменной, но возвращает первоначальное значение.
a = i++
означаетa = i; i = i + 1;
a = ++i
означаетi = i + 1; a = i;
Бинарные + - * / %
Эти операторы выполняют знакомые всем математические операции. Оператор взятия по модулю % делит первое число на второе целое количество раз и возвращает остаток.
Логические операторы
Логические операторы используются для создания булевых выражений, которые обычно используются для приятия решений о ходе выполнения программы.
Унарный оператор отрицания !
Логическое отрицание ставится перед булевым выражением и меняет его истинность.
Бинарные операторы сравнения < > <= >= == != === !==
Большинство операторов перед сравнением приводят операнды к общему типу. Строгое равенство === и строгое неравенство !== могут использоваться, когда такое приведение нежелательно. Примеры равных выражений с точки зрения оператора ==
- null == undefined
- 1 == "1"
- true == 1
- false == 0
Логическое И &&, логическое ИЛИ ||
Эти операторы объединяют два булевых выражения в одно. Оператор && возвращает 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 | , | Множественное выражение |