js 运算符及其优先级
最近看了一段代码:
1 //翻页 2 var goToPage=function(page){ 3 if(currentPage==page||page>totalPage-1||page<0){ 4 return currentPage; 5 } 6 $("#page"+(currentPage)).addClass("transparent").removeClass("visible"); 7 $("#page"+(page)).addClass("visible").removeClass("transparent"); 8 $("#container-page").css({ 9 "left":page*-100+"%", 10 transition:'left ease-in-out .5s' 11 }); 12 $("#page"+(page))[0].scrollTop=0; 13 $(".pre-page,.next-page").removeClass("disabled"); 14 page==0&&$(".pre-page").addClass("disabled"); 15 page==totalPage-1&&$(".next-page").addClass("disabled"); 16 return currentPage=page; 17 };
其中有几行代码(9、14、15)行不太理解。
page*-100到底是个什么鬼,下断点调试了一下,发现page是1,而page*-100是-100,又问了问同事,才知道原来page*-100就是page*(-100),这是个运算符优先级的问题。
说实话,说到先乘除后加减我想大家一定都知道,但是真的当你看到上面的代码时,我想一定有人和我一样懵了,不知道这是什么,所以我觉得写代码还是要有一定的规范性,该加的括号还是加上,能让大家都看懂的代码才是好代码。
另外一个问题是第14行,在我的意识里,&&就是两边都为true,才返回true,有一边是false,那么结果就是false,而14行中&&左边的0转换成Boolean值就是false,所以我一直认为这个值是永恒的false,一点意义都没有,结果下了断点之后发现结果是0.
这两个问题让我意识到自己的基础是多么的不扎实,也让我重新开始审视运算符和运算符优先级的问题。
运算符:
a && b
如果 a 为true,直接返回b,而不管b为true或者false 。如果 a 为false 那么直接返回a
a || b
如果 a 为true,直接返回a,而不会继续往下执行。如果 a 为false,直接返回b,而不管b为true或者false 。相当于a?a:b