Операторы JavaScript: различия между версиями
imported>Supportadmin (Новая страница: «==Операторы== В ECMAScript имеются как операторы, использующие в качестве названий ключевые сл…») |
imported>Supportadmin |
||
Строка 3: | Строка 3: | ||
===Классификация операторов=== | ===Классификация операторов=== | ||
По убыванию приоритета операторы ECMAScript можно разбить в следующие группы: | '''По убыванию приоритета операторы ECMAScript можно разбить в следующие группы''': | ||
:. (доступ к свойству),[] (доступ к свойству),() (вызов функции), new (создание нового объекта), | :*. (доступ к свойству),[] (доступ к свойству),() (вызов функции), new (создание нового объекта), | ||
:++ (инкремент), -- (декремент), - (унарный минус), + (унарный плюс), ~ (поразрядное дополнение), ! (логическое дополнение), delete (удаление свойства), typeof (определение примитивного типа данных), void (возврат неопределённого значения), | :*++ (инкремент), -- (декремент), - (унарный минус), + (унарный плюс), ~ (поразрядное дополнение), ! (логическое дополнение), :*delete (удаление свойства), typeof (определение примитивного типа данных), void (возврат неопределённого значения), | ||
:<nowiki>*</nowiki> (умножение), / (деление), % (остаток от деления), | :*<nowiki>*</nowiki> (умножение), / (деление), % (остаток от деления), | ||
:+ (сложение), - (вычитание), + (конкатенация строк), | :*+ (сложение), - (вычитание), + (конкатенация строк), | ||
:<< (сдвиг влево), >> (сдвиг вправо с расширением знакового разряда), >>> (сдвиг вправо с дополнением нулями), | :*<< (сдвиг влево), >> (сдвиг вправо с расширением знакового разряда), >>> (сдвиг вправо с дополнением нулями), | ||
:< (меньше), <= (меньше или равно), > (больше), >= (больше или равно), instanceof (проверка типа объекта), in (проверка наличия свойства), | :*< (меньше), <= (меньше или равно), > (больше), >= (больше или равно), instanceof (проверка типа объекта), in (проверка наличия свойства), | ||
:== (проверка на равенство), != (проверка на неравенство), === (проверка на идентичность), !== (проверка на неидентичность), | :*== (проверка на равенство), != (проверка на неравенство), === (проверка на идентичность), !== (проверка на неидентичность), | ||
:& (поразрядная конъюнкция), | :*& (поразрядная конъюнкция), | ||
:^ (поразрядное сложение по модулю 2), | :*^ (поразрядное сложение по модулю 2), | ||
:| (поразрядная дизъюнкция), | :*| (поразрядная дизъюнкция), | ||
:&& (конъюнкция), | :*&& (конъюнкция), | ||
:|| (дизъюнкция), | :*|| (дизъюнкция), | ||
:?: (тернарная условная операция), | :*?: (тернарная условная операция), | ||
:= (присваивание), *=, /=, +=, -=, <<=, >>=, >>>=, &=, ^=, |= (присваивание с операцией), | :*= (присваивание), *=, /=, +=, -=, <<=, >>=, >>>=, &=, ^=, |= (присваивание с операцией), | ||
:, (множественное вычисление)[17]. | :*, (множественное вычисление)[17]. | ||
Операторы ++, --, -, +, ~, !, delete, typeof, void, ?:, =, *=, /=, +=, -=, <<=, >=, >>>=, &=, ^=, |= правоассоциативны (то есть для них a op b op c эквивалентно a op (b op c)). Остальные операторы ECMAScript левоассоциативныe. | Операторы ++, --, -, +, ~, !, delete, typeof, void, ?:, =, *=, /=, +=, -=, <<=, >=, >>>=, &=, ^=, |= правоассоциативны (то есть для них a op b op c эквивалентно a op (b op c)). Остальные операторы ECMAScript левоассоциативныe. | ||
По арности операторы ECMAScript делятся на следующие группы: | '''По арности операторы ECMAScript делятся на следующие группы''': | ||
:унарные (delete, void, typeof, ++, --, - (унарный минус), + (унарный плюс), ~, !, new), | :*унарные (delete, void, typeof, ++, --, - (унарный минус), + (унарный плюс), ~, !, new), | ||
:бинарные (., [], (), *, /, %, + (сложение), - (вычитание), + (конкатенация строк), <<, >>, >>>, <, <=, >, >=, instanceof, in, ==, !=, ===, !==, &, ^, |, &&, ||, =, *=, /=, +=, -=, <<=, >=, >>>=, &=, ^=, |=, ,), | :*бинарные (., [], (), *, /, %, + (сложение), - (вычитание), + (конкатенация строк), <<, >>, >>>, <, <=, >, >=, instanceof, in, ==, !=, ===, !==, &, ^, |, &&, ||, =, *=, /=, +=, -=, <<=, >=, >>>=, &=, ^=, |=, ,), | ||
:тернарные (?:), | :*тернарные (?:), | ||
:операторы, не имеющие фиксированного количества операндов (() | :*операторы, не имеющие фиксированного количества операндов (()). | ||
Также операторы классифицируются по типу операндов и по характеру осуществляемого действия. | '''По положению знака операции относительно операндов операторы ECMAScript делятся на следующие группы''': | ||
:*префиксные (например, new, ++ (префиксный инкремент), | |||
:*инфиксные (например, +, -), | |||
:*постфиксные (например, ++ (постфиксный инкремент), -- (постфиксный декремент). | |||
'''Также операторы классифицируются по типу операндов и по характеру осуществляемого действия'''. | |||
===Особенности операторов ECMAScript=== | ===Особенности операторов ECMAScript=== |
Текущая версия от 11:43, 4 августа 2013
Операторы
В 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