左结合与右结合
有的运算符是左结合的,即运算从左到右执行,如
w = x + y + z;
w = (x + y) + z; //与上行等同
有的运算符是右结合的
w = x = y = z;
w = (x = (y = z)); //与上行等同
w = a: b: c ? d : e? f : g;
w = a? b : (c? d: (e? f : g)); //与上行等同
常遇到的优先级
-
算术运算符>关系运算符>逻辑运算符>赋值运算符
-
typeof
的优先级相当的高,比加减乘除神马的都高,所以虽然是操作符,在在复杂表达式的时候我们还是习惯加括号,看个例子
typeof 2*3;//NaN
typeof (2*3);//"number"
typeof 2+3;// "number3"
-
++
、--
是右结合的操作符(优先级最高的几个都是右结合),而且比加减乘除优先级高。同时自增、自减运算符的运算数得是左值(可以放在赋值符号左边的值),而不能是常数
4++; //ReferenceError: Invalid left-hand side expression in postfix operation
var a=0,b=0;
a+++b;//0
a;//1,++优先级比+高,所以相当于(a++)+b
b;//0
- 赋值运算符的优先级相当的低
a = b == c; //等同于a = (b==c)
- 逻辑非
!
也在优先级队列的前端,比加减乘除高,但逻辑与、逻辑或优先级很低,不如加减乘除
!2*0; //0, 等价于(!2)*0
- 断路与 和 短路或
1 && 3;
1 && "foo" || 0;
1 || "foo" && 0
网友评论