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

 

posted @ 2015-04-23 15:59  前端小菜鸟~  阅读(1652)  评论(0编辑  收藏  举报