В Javascript есть все необходимые для жизни операторы, хотя нет их перегрузки.
Некоторые операторы(+,побитовые,логические,===) имеют специфические особенности.
В Javascript есть даже операторы >>> и <<<.
В отличие от некоторых других языков, оператор "+" делает конкатенацию, если хотя бы один операнд - строка, причем, не обязательно первый.
Проверим:
Унарный оператор "+" также используется для преобразования строки к числу:
alert(+"123"+1) // 124
Все побитовые операции работают с 4-байтовым signed int.
Операция >>> сдвигает побитово вправо, а слева нулями дополняет. В результате эффект - тот же, что и при простом сдвиге >> для положительных чисел.
Для отрицательных - все по-другому. Например, -9 в битовом виде выглядит как: 11111111111111111111111111110111.
Операция >>> даст эффект: -9 >>> 2 будет в битовом виде 00111111111111111111111111111101, т.е 1073741821.
Логическое И. Возвращает последний операнд, если все операнды верны. Если хоть один из операндов неверен, то возвратит первый неверный операнд.
Например, 1 && 2 = 2:
1 && 0 && false === 0:
Оператор И обычно используется, чтобы избежать ошибок при получении вложенных свойств объекта.
Например, нужно свойство petShop.animals.rabbit или ложное значение, если такого свойства нет.
Безопасный способ:
var rabbit = petShop && petShop.animals && petShop.animals.rabbit
Этот код корректно выполнится, даже если petShop = false, в то время как
var rabbit = petShop.animals.rabbit
выдаст ошибку(бросит исключение) об отсутствующем свойстве.
Оператор логического ИЛИ возвращает первое верное значение. А если верных значений вообще нет, то последнее неверное.
Это удобно использовать так:
var e = event || window.event // если event не событие, то берем window.event
Логическое НЕ, также удобно для преобразования в Boolean.
var str = "something" // эквивалентные записи var test = Boolean(str) var test = !!str
Операторы больше-меньше также работают со строками, сравнивая их лексикографически, т.е посимвольно.
"B">"a" "bc" < "bd"
Сравнение == делается с приведением типов, а === без приведения типов, например:
0 == false // верно // но 0 !== false //типы разные
undefined, null, NaN. Более подробно об алгоритме в этом случае можно прочитать в секции 11.9.3 стандарта ECMA-262.Тернарный оператор. В старых парсерах javascript с ним были проблемы, надо было заключать сравнение в скобки, но в новых - вполне нормальный оператор
var test = (1==2) ? "one" : "two" // эквивалентно var test = 1==2 ? "one" : "two"