Операторы JavaScript

Материал из support.qbpro.ru
Версия от 11:42, 4 августа 2013; imported>Supportadmin (Новая страница: «==Операторы== В ECMAScript имеются как операторы, использующие в качестве названий ключевые сл…»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Операторы

В 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