在javascript中:
以下内容会被当成false处理:"" , false , 0 , null , undefined , NaN
其他都是true。注意:字符串"false"也会被当做true处理,在未转型的情况下他是字符串,属于一个对象,所以是true。
1、JS中的||符号:
运算方法:
只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。
只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值。
总结:真前假后
a || b:如果a是true,那么b不管是true还是false,都返回true。不用再判断b。
如果a是false,那么就要判断b,如果b是true,那么返回true,如果b是false,返回false。
2、JS中的&&符号:
运算方法:
只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;
只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值;
总结:假前真后
a && b:如果a是false,那么b不管是true还是false,都返回false,因此不用判断b了。
如果a是true,那么就要在判断b,和刚刚一样,不管b是true是false,都返回b。
3、位运算符:|
运算方法:
两个位只要有一个为1,那么结果都为1。否则就为0
|运算符还能进行取整运算
例:5.3 | 4.2 结果为5,5的二进制为101,4的二进制为100 101|100的结果为101 即5
4、位运算符:&
运算方法:
两个数值的个位分别相与,同时为1才得1,只要一个为0就为0。
性能上的比较
逻辑运算符&& || 中,如果&&的第一个运算数是false,就不再考虑第二个运算数,直接返回false;如果||的第一个运算数是true,也不再考虑第二个运算数,直接返回true。而&和|运算符却不是这样的,它们总是要比较两个运算数才得出结果,因而性能上&&和||会比&和|好。
功能用法
&&和||只能进行逻辑运算,而&和|除了可以进行"逻辑运算"外,还可以进行位运算
位运算
&和|本是位运算符,之所以可以进行"逻辑运算",是由于JS是无类型的语言、各数据类型可以自由转换这一特性决定的,当用&和|进行"逻辑运算"时,实际上true被转换成1,false被转换成0,再进行逐位运算:
true & false // 0 ; 等同于逻辑运算被转化成位运算,并执行: 1 & 0 // 0
也正是由于&和|是逐位运算符,才出现了上面中所说的,它们总是要比较两个运算数才得出结果,导致性能会比&&和||低一些。
位运算用途实例:
遍历中,i++每次循环,按执行次数的奇偶,轮流执行2段代码:
for(i=1;i<10;i++){
// i && 1? console.log("第1段代码") : console.log("第2段代码");
i & 1? console.log("第1段代码") : console.log("第2段代码");
}