代码改变世界

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

2011-11-09 14:00  飞魚  阅读(1520)  评论(1编辑  收藏

相同优先级顺序执行

1 var a = 1 && 2 && 3  // 3,1 && 2  1为真返回2;2 || 3, 2为真返回3 ;
2 var b = 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

&& 大于 ||

01 var a = 3 && 0 || 2;  //2
02 var b = 3 && 1 || 2;  //1
03 var c = 0 && 1 || 2;  //2
04 var d = 0 && 0 || 2;  //2
05  
06 var e = 3 || 0 && 2; // 3
07 var f = 3 || 1 && 4;// 3
08 var g = 0 || 0 && 1;// 0
09 var h= 0 || 2 && 3; // 3
10  
11 var i=   a && b || g && h   //(a && b) || (g && h)

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

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

== 大于 &&

1 var a= 1 && 3 == 2 ;//false
2 var b= 0 && 3 == 3; // 0

|| 大于 ? :

1 var a =1 && 2 ? 0 :1  // 0   相当于 (1 && 2) ? 0 :1
2 var b = 1 || 2 ? 0 :1  // 0 相当于 (1 || 2) ? 0 :1

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

1 var b=0;
2 var a = 2 == 1 && b++ == 1; //false

jQuery之 nth 函数有:

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

have a exercise

jquery 之prop 函数有类似于:

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

相当于(a &&( b == c ) && (d == e) && f ) ? g:h
jQuery之 event 包裹函数fix有:

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

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

来个总结

01 运算符 描述
02 . [] () 字段访问、数组下标、函数调用以及表达式分组
03 ++ -- - ~ ! delete new typeof void  一元运算符、返回数据类型、对象创建、未定义值
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