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

贷款j北京

贷款j北京

2016-02-20 00:33

下面图老师小编要向大家介绍下JS的&&和&||和|运算符两个不同点,看起来复杂实则是简单的,掌握好技巧就OK,喜欢就赶紧收藏起来吧!

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)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,再进行逐位运算。也正是由于&和|是逐位运算符,才出现了第一点中所说的,它们总是要比较两个运算数才得出结果,才导致性能会比&&和||低一些。
展开更多 50%)
分享

猜你喜欢

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

Web开发
JS的&&和&||和|运算符两个不同点

IE和Firefox浏览器JS的不同点

Web开发
IE和Firefox浏览器JS的不同点

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

C++运算符重载赋值运算符

编程语言 网络编程
C++运算符重载赋值运算符

关于拷贝构造函数和赋值运算符

C语言教程 C语言函数
关于拷贝构造函数和赋值运算符

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

C++运算符重载转换运算符

编程语言 网络编程
C++运算符重载转换运算符

JavaScript教程:表达式和运算符

Web开发
JavaScript教程:表达式和运算符

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Javascript的一种模块模式

Javascript的一种模块模式

2个搞笑的兔斯基

2个搞笑的兔斯基
下拉加载更多内容 ↓