一、JS双竖线“||”运算符:是或比较。测试“||”的小程序 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div id="123"></div> </body> <script> var a; var b=4(true); a=b||5;//4 var c=0(false); a=c||5;//5 var d=-4(true); a=d||5;//-4 var writer=document.getElementById('123'); writer.innerHTML=a; </script> </html> 结论:即或运算符中,第一个为真,后面的就不用计算了。js 中 使用双竖线运算符"||",返回第一个有效值。 二、JS单竖线“|”运算符:取整运算。 在js整数操作的时候,相当于去除小数点,parseInt。在正数的时候相当于Math.floor(),负数的时候相当于Math.ceil() 注: 1. Math.ceil()用作向上取整。 单竖杠的运算规则 看了上面的例子,大体知道单竖杠可以进行取整运算,就是只保留正数部分,小数部分通过拿掉,但是“|0”,又是如何进行运算的呢,为什么能“|0”能达到取整的目的呢?单竖杠不是0有会是多少呢? 带着这些问题,我们看下面例子: 这里面提到了单竖杠“|”但是没有javascript的。 好吧,我在这里公布答案吧。其实单竖杠“|”就是转换为2进制之后相加得到的结果。例如我们拿简单的举例: 3|4 转换为二进制之后011|100 相加得到111=7 4|4 转换为二进制之后100 |100 相加得到100=4 8|3 转换为二进制之后1000 |011 相加得到1011=11 以此类推,我在这里就不一一列举了,单竖杠“|”运算就是转换为2进制之后相加得到的结果! 总结:性能上的比较 逻辑运算符&& || 中,如果&&的第一个运算数是false,就不再考虑第二个运算数,直接返回false;如果||的第一个运算数是true,也不再考虑第二个运算数,直接返回true。而&和|运算符却不是这样的,它们总是要比较两个运算数才得出结果,因而性能上&&和||会比&和|好。 功能用法 &&和||只能进行逻辑运算,而&和|除了可以进行"逻辑运算"外,还可以进行位运算 位运算 &和|本是位运算符,之所以可以进行"逻辑运算",是由于JS是无类型的语言、各数据类型可以自由转换这一特性决定的,当用&和|进行"逻辑运算"时,实际上true被转换成1,false被转换成0,再进行逐位运算: 上面这句,实例等同于逻辑运算被转化成下面的位运算,并执行: 也正是由于&和|是逐位运算符,才出现了第一点中所说的,它们总是要比较两个运算数才得出结果,才导致性能会比&&和||低一些。 三、真假: 真:除了下边的六个,其他的全是true 假:false,数字0,空字符串,null,undefined,NaN |
|