zoukankan      html  css  js  c++  java
  • Javascript中&&和&,||和|运算符两个不同点

    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,再进行逐位运算。也正是由于&和|是逐位运算符,才出现 了第一点中所说的,它们总是要比较两个运算数才得出结果,才导致性能会比&&和||低一些。

  • 相关阅读:
    RestTemplateConfig写法,用于配置Template引擎模板
    RedisUtil写法,好用
    ftpUtil写法,记录一下
    生成唯一id写法,雪花算法
    base64编码转图片,图片转base64编码
    MultipartFile上传图片的写法,记录一下。
    httpClientUtil的put请求
    httpClientUtil的post请求
    python time和datetime
    ubuntu16.04TLS软件源update
  • 原文地址:https://www.cnblogs.com/niaowo/p/3710248.html
Copyright © 2011-2022 走看看