首页 > 代码库 > 说一说&&符

说一说&&符

今天添加检测代码,还得添加好几套,好蛋疼。

为了省点事,全写在HTML的行间onclick里,为此专门琢磨了一下&&的用法。

一般用&&(除了逻辑判断里),是为了简写if语句,比如:

if(true) {alert(1)}true && alert(1)

这俩效果是一样的,但是有return就不行了,如下:

(function(){if(true) {return true}})() // 正常(function(){true && return true})()    // 报错 SyntaxError: Unexpected token return(function(){true && (return true)})()  // 报错 SyntaxError: Unexpected token return(function(){true && {return true}})()  // 报错 SyntaxError: Unexpected token true

两个return错误,一个值错误,语法问题,这么写是不正确的,所以有return的时候,还是老老实实的if语句吧。

还有就是有else或else if的,不能用&&,用三目或者switch都行,但是注意switch检测的时候是===全等符,只能检测是true的情况,如下:

switch(true) {    case 1>2:        alert(1);        break;    case 1:        alert(2);        break;    default:        alert(3);}

只会弹出3,1、2都不会弹出。

然后说一下多个连写的,连续触发多个函数的,如下:

if(true) {    alert(1);    alert(2);}true && alert(1),alert(2)true && (alert(1),alert(2))true && alert(1) || alert(2)

上面四种写法都能执行,弹出1和2,有返回值,是undefined,这样下面这句话不会执行:

true && alert(1),alert(2) && alert(3)

只会弹出1和2,没有3。

因为 , 这个运算符,返回的是最后一项的值,即上句代码中的 alert(2) 的返回值undefined,所以 alert(3) 没有执行,有两种改法,如下:

true && alert(1),alert(2),true && alert(3)
true && alert(1),alert(2) || alert(3)

都会弹出3来。

还有一种用法忘了说,用在赋值的时候,如下:

true && a = 1true && (a = 1)

第一种会报错 ReferenceError: Invalid left-hand side in assignment ,要加上小括号,以为前一种 = 会把左边和右边各看成一部分,这样就报错了。

第二种则事将 (a = 1) 小括号看作一部分,然后 = 左a,右1,没有错误,并且返回1。

最后加一句||的,和&&一样,都会将里面的函数执行掉,只不过一个是遇到是true的就停,另一个是遇到是false的就停,要稍微注意下。

Array.prototype.map || Array.prototype.map = function(item, index, arr) {    // blablablabla...};

通常的ES5功能补全用法。

 

都是自己瞎琢磨的,有不对之处还望指正!

 

说一说&&符