当前位置: 首页 > 图文教程 > 网络编程 > Javascript > JS的&&和&,||和|运算符两个不同点

Javascript
12个最常见的CSS问题的javascript解决方案
JavaScipt布局网页的11个网页特效实例
6个设计优秀的下拉导航菜单效果
Webjx收集jquery实现动画效果的插件和教程
MooTools教程和资源(Webjx收集英文教程)
游戏人文件夹程序 ver 3.0
游戏人文件夹程序 ver 4.03
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
datePicker:日期选择控件(with jquery)
通过jquery实现tab标签浏览效果
js压缩利器
一个高效的JavaScript压缩工具 JSA 下载
User Scripts: Video Download by User Scripts
use jscript Create a SQL Server database
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
[原创]js循环输出图片,不足的要补0
[原创]js判断ie方法集锦(含正则)代码短小经典
利用404错误页面实现UrlRewrite的实现代码
[原创]js判断是否有中文的脚本_js判断中文方法集合
图片上传即时显示缩略图的js代码

Javascript 中的 JS的&&和&,||和|运算符两个不同点


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 367 ::
收藏到网摘: n/a

1.性能上的比较

如果&&的第一个运算数是false,就不再考虑第二个运算数,直接返回false;如果||的第一个运算数是true,也不再考虑第二个运算数,直接返回true。&和|运算符却不是这样的,它们总是要比较两个运算数才得出结果,因而性能上&&和||会比&和|好。

由于&&和||可能不考虑第二个运算数,所以我们应尽量避免在它们右边使用具有副作用(赋值、递增、递减和函数调用)的表达式,除非非常清楚自己再做什么。

if((a == null) && (b++ >10)) stop(); //b++递增运算可能不被执行
if((b++ >10) && (a == null)) stop(); //保证b++递增运算都被执行

2.逐位运算

&和|除了可以进行"逻辑运算"[1]外,还可以进行逐位运算,而&&和||只能进行逻辑运算。

3.JS的&和|与C#的&和|

在JS中,&和|只是逐位运算符,而在C#中,&和|既是逻辑运算符,又是位运算,通过以下代码可以看出。

document.write(true & false); //JS,结果为0
document.write(1 & 0); //JS,结果为0
bool a = true & false; //C#,结果为false
int b = 1 & 0; //结果为0


注[1]:&和|本是逐位运算符,之所以可以进行"逻辑运算",是由于JS是无类型的语言、各数据类型可以自由转换这一特性决定的,当用&和|进行"逻辑运算"时,实际上true被转换成1,false被转换成0,再进行逐位运算。也正是由于&和|是逐位运算符,才出现了第一点中所说的,它们总是要比较两个运算数才得出结果,才导致性能会比&&和||低一些。