Операторы JavaScript
Операторы
В ECMAScript имеются как операторы, использующие в качестве названий ключевые слова, так и операторы, использующие в качестве названий знаки препинания.
Классификация операторов
По убыванию приоритета операторы ECMAScript можно разбить в следующие группы:
- . (доступ к свойству),[] (доступ к свойству),() (вызов функции), new (создание нового объекта),
- ++ (инкремент), -- (декремент), - (унарный минус), + (унарный плюс), ~ (поразрядное дополнение), ! (логическое дополнение), delete (удаление свойства), typeof (определение примитивного типа данных), void (возврат неопределённого значения),
- * (умножение), / (деление), % (остаток от деления),
- + (сложение), - (вычитание), + (конкатенация строк),
- << (сдвиг влево), >> (сдвиг вправо с расширением знакового разряда), >>> (сдвиг вправо с дополнением нулями),
- < (меньше), <= (меньше или равно), > (больше), >= (больше или равно), instanceof (проверка типа объекта), in (проверка наличия свойства),
- == (проверка на равенство), != (проверка на неравенство), === (проверка на идентичность), !== (проверка на неидентичность),
- & (поразрядная конъюнкция),
- ^ (поразрядное сложение по модулю 2),
- | (поразрядная дизъюнкция),
- && (конъюнкция),
- || (дизъюнкция),
- ?: (тернарная условная операция),
- = (присваивание), *=, /=, +=, -=, <<=, >>=, >>>=, &=, ^=, |= (присваивание с операцией),
- , (множественное вычисление)[17].
Операторы ++, --, -, +, ~, !, delete, typeof, void, ?:, =, *=, /=, +=, -=, <<=, >=, >>>=, &=, ^=, |= правоассоциативны (то есть для них a op b op c эквивалентно a op (b op c)). Остальные операторы ECMAScript левоассоциативныe.
По арности операторы ECMAScript делятся на следующие группы:
- унарные (delete, void, typeof, ++, --, - (унарный минус), + (унарный плюс), ~, !, new),
- бинарные (., [], (), *, /, %, + (сложение), - (вычитание), + (конкатенация строк), <<, >>, >>>, <, <=, >, >=, instanceof, in, ==, !=, ===, !==, &, ^, |, &&, ||, =, *=, /=, +=, -=, <<=, >=, >>>=, &=, ^=, |=, ,),
- тернарные (?:),
- операторы, не имеющие фиксированного количества операндов (()).
По положению знака операции относительно операндов операторы ECMAScript делятся на следующие группы:
- префиксные (например, new, ++ (префиксный инкремент),
- инфиксные (например, +, -),
- постфиксные (например, ++ (постфиксный инкремент), -- (постфиксный декремент).
Также операторы классифицируются по типу операндов и по характеру осуществляемого действия.
Особенности операторов ECMAScript
В ECMAScript нет оператора, позволяющего проверить, относится ли свойство непосредственно к объекту или является унаследованным.
Такая проверка осуществляется с помощью метода hasOwnProperty(). В связи с тем, что данный метод не является оператором, он может быть переписан любым другим свойством.
Оператор + является единственным арифметическим оператором в языке, который перегружен для строковых аргументов. Если хотя бы один из операндов — строка, + действует как конкатенатор, в противном случае выполняется сложение.
В отличие от языков, где void является типом данных, в ECMAScript это оператор, возвращающий значение undefined.
Оператор == осуществляет проверку на равенство по алгоритму, состоящему из 10 шагов, подразумевающего в ряде случаев преобразование типов, что, в конечном счёте, может привести к неочевидным результатам.
Пример результатов работы == (во всех перечисленных случаях значением оператора === с теми же аргументами будет false):
alert("NaN" == NaN); // false alert(NaN == NaN); // false alert(true == 1); // true alert(true == 42); // false alert(null == 0); // false alert(0 == ""); // true alert("" == 0); // true alert("false" == false); // false alert(false == 0); // true alert(undefined == false); // false alert(null == false); // false alert(undefined == null); // true alert(" \t\r\n " == 0); // true