不可不知的JavaScript运算符优先级

相同优先级顺序执行

1vara = 1 && 2 && 3// 3,1 && 2 1为真返回2;2 || 3, 2为真返回3 ;
2varb = 1 || 2 || 3// 1 ,1 || 2 1为真返回1;1 || 3 ,1为真返回1;

“&&” 寻找false。例如: a && b ,如果 a 为true,直接返回b,而不管b为true或者false 。

“||” 寻找true。 与&&同理,例如:a || b ,如果 a 为false,直接返回b,而不管b为true或者false 。

像 && || 连续使用,是这样的如:

return a && b || c ,根据a来判断返回值,a 是 false 则肯定返回 c;如果 b , c 都是 true ,那么我们就可以根据 a 来决定b 还是 c ,如果 a 是 false 则返回 c,如果a是true 则返回 b。

a || b && c

根据优先级相当于先算 b && c ,然后和a 相 或;如果a是true,则返回a,不论是b或c,如果a是false,则如果b是false,返回b,如果b是true,返回c;

相当于一下三种情况

 >>> 1 || b && c
1
>>> 0 || 0 && c
0
>>> 0 || 1 && 2
2

&& 大于 ||

01vara = 3 && 0 || 2;//2
02varb = 3 && 1 || 2;//1
03varc = 0 && 1 || 2;//2
04vard = 0 && 0 || 2;//2
05
06vare = 3 || 0 && 2;// 3
07varf = 3 || 1 && 4;// 3
08varg = 0 || 0 && 1;// 0
09varh= 0 || 2 && 3;// 3
10
11vari= a && b || g && h//(a && b) || (g && h)

|| 常用来设置默认值,例:

1functionfoo(b){
2vara = b || 1;
3alert(a)
4}
5
6foo(2)//2
7foo()//1

== 大于 &&

1vara= 1 && 3 == 2 ;//false
2varb= 0 && 3 == 3;// 0

|| 大于 ? :

1vara =1 && 2 ? 0 :1// 0 相当于 (1 && 2) ? 0 :1
2varb = 1 || 2 ? 0 :1// 0 相当于 (1 || 2) ? 0 :1

++大于 == 大于 && 大于 ||

1varb=0;
2vara = 2 == 1 && b++ == 1;//false

jQuery之 nth 函数有:

1cur.nodeType == 1 && ++num == result

have a exercise

jquery 之prop 函数有类似于:

1a && b == c && d == e && f ? g:h

相当于(a &&( b == c ) && (d == e) && f ) ? g:h

jQuery之 event 包裹函数fix有:

1e.which = (event.button & 1 ? 1 : (event.button & 2 ?3 : (event.button & 4 ? 2 :0 )))

此种类型的运算符连续使用在jQuery是家常菜。

来个总结

01运算符 描述
02. [] () 字段访问、数组下标、函数调用以及表达式分组
03++ -- - ~ !deletenewtypeofvoid 一元运算符、返回数据类型、对象创建、未定义值
04* / % 乘法、除法、取模
05+ - + 加法、减法、字符串连接
06< < >> >>> 移位
07< <= > >=instanceof小于、小于等于、大于、大于等于、instanceof
08== != === !== 等于、不等于、严格相等、非严格相等
09& 按位与
10^ 按位异或
11| 按位或
12&& 逻辑与
13|| 逻辑或
14?: 条件
15= oP= 赋值、运算赋值
16, 多重求值

+ 和++ 的优先级看是前自加还是后自加。

操作符分类操作符描述

+(加法) 将两个数相加。
++(自增) 将表示数值的变量加一(可以返回新值或旧值)。
-(求相反数,减法) 作为求相反数操作符时返回参数的相反数。作为二进制操作符时,将两个数相减。
(自减) 将表示数值的变量减一(可以返回新值或旧值)。
*(乘法) 将两个数相乘。
/(除法) 将两个数相除。
%(求余) 求两个数相除的余数。
字符串操作符+(字符串加法) 连接两个字符串。
+=连接两个字符串,并将结果赋给第一个字符串。

&&(逻辑与) 如果两个操作数都是真的话则返回真。否则返回假。
||(逻辑或) 如果两个操作数都是假的话则返回假。否则返回真。
!(逻辑非) 如果其单一操作数为真,则返回假。否则返回真。

&(按位与) 如果两个操作数对应位都是 1 的话则在该位返回 1。
^(按位异或) 如果两个操作数对应位只有一个 1 的话则在该位返回 1。
|(按位或) 如果两个操作数对应位都是 0 的话则在该位返回 0。
~(求反) 反转操作数的每一位。
<<(左移) 将第一操作数的二进制形式的每一位向左移位,所移位的数目由第二操作数指定。右面的空位补零。
>>(算术右移) 将第一操作数的二进制形式的每一位向右移位,所移位的数目由第二操作数指定。忽略被移出的位。
>>>(逻辑右移) 将第一操作数的二进制形式的每一位向右移位,所移位的数目由第二操作数指定。忽略被移出的位,左面的空位补零。

=将第二操作数的值赋给第一操作数。
+=将两个数相加,并将和赋给第一个数。
-=将两个数相减,并将差赋给第一个数。
*=将两个数相乘,并将积赋给第一个数。
/=将两个数相除,并将商赋给第一个数。
%=计算两个数相除的余数,并将余数赋给第一个数。
&=执行按位与,并将结果赋给第一个操作数。
^=执行按位异或,并将结果赋给第一个操作数。
|=执行按位或,并将结果赋给第一个操作数。
<<=执行左移,并将结果赋给第一个操作数。
>>=执行算术右移,并将结果赋给第一个操作数。
>>>=执行逻辑右移,并将结果赋给第一个操作数。

==如果操作数相等的话则返回真。
!=如果操作数不相等的话则返回真。
>如果左操作数大于右操作数的话则返回真。
>=如果左操作数大于等于右操作数的话则返回真。
<如果左操作数小于右操作数的话则返回真。
<=如果左操作数小于等于右操作数的话则返回真。

?:执行一个简单的“if…else”语句。
,计算两个表达式,返回第二个表达式的值。
delete允许你删除一个对象的属性或数组中指定的元素。
new允许你创建一个用户自定义对象类型或内建对象类型的实例。
this可用于引用当前对象的关键字。
typeof返回一个字符串,表明未计算的操作数的类型。
void该操作符指定了要计算一个表达式但不返回值。

原文链接地址http://blog.meituo.net/2010/08/29/%E4%B8%8D%E5%8F%AF%E4%B8%8D%E7%9F%A5%E7%9A%84javascript%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7/

MDN链接https://developer.mozilla.org/en/JavaScript/Reference/Operators/Operator_Precedence