zoukankan      html  css  js  c++  java
  • 关于运算符 && 和 | | 的学习

    本文来源:http://www.zhangxinxu.com/wordpress/?p=3223

    1. 1&&3

    // retrun 3  (在下面做出解释);


    1 == true  0 == false  

    关于操作符,在这里再记下数据转换的规则:

    *如果两个操作数都是数组,则进行数值比较:

    var compare = 5 > 3
    // true

    *如果两个操作数是字符串。则比较两个字符串对应的字符编码值。大写字母的编码值全部小于小写字母的字符编码值。

    var result  = "Bill" < "amy";
    //ture 
    B的字符编码为66,a的字符编码为97
    
    var result  = "bill" < "amy";
    //false
    b排在a之后

    *如果一个操作符数是数组,则将另一个转为一个数值,然后执行数值比较

    比如一个字符串和数字比较,字符串会被转换为数字,然后再比较。但是两个字符串比较,就是比较字符编码:

    var result1 = "23" < 3 //false "23"被转为23
    
    var result2 = "23" < "3" //true "2"的字符编码是50,"3"的字符编码是51 

    但是当字符串不能被转换为一个合理的数值时:

    var result = "a" < 3; //false 因为"a"被转换为了NaN
    
    任何操作数与NaN比较,结果都是false
    所以:
    var result = "a" < 3; //false
    var result = "a" >= 3; //false

    *相等操作符

    两组操作符:相等和不相等——先转换类型再比较
          全等和不全等——仅比较而不转换类型

    var result1 = ("55" == 55)  //true 因为转换后相等
    var result2 = ("55" === 55)  //false 因为不同的数据类型不相等
    var result1 = ("55" != 55) // false 因为转换后相等
    var result2 = ("55" !== 55) // true 因为不同的数据类型不相等 

    在转换不同的数据类型时相等不等遵循以下基本规则:

    *如果有一个操作数是布尔值,则在比较相等性前先将其转换为数值: false转换为0,true转为1;

    逻辑与(&&) :

    1)如果第一个操作数为对象,则返回第二个操作数;

    2)  如果第二个操作数是对象,只有在第一个操作数的求值结果为true的情况下,才会返回该对象;

    3)如果两个操作数都是对象,则返回第二个操作数;

    4)  如果有一个为null,则返回null;若有一个为NaN,则返回NaN, 若有一个为undefined,则返回undefined

     逻辑与操作属于短路操作,只要第一个为false。第二个不论什么结果都不可能为true;

    逻辑或( | | ) :

    1) 如果第一个操作数为对象,则返回第一个操作数;

    2) 如果第一个操作数求值结果为false,则返回第二操作数;

    3)如果两个操作数都是对象,则返回第一个操作数;

    4)如果有两个为都null,则返回null;若有两个为都NaN,则返回NaN, 若两个都为undefined,则返回undefined

    逻辑或也属于短路操作,如果第一个操作数求值结果为true,就不会对第二个操作数求值了;

    test:

    1 && 3  // return 3 
    2 && 3  // return 3 
    0 && 3 // return 0
    -1 && 3 // return 3
    
    true &&  3 // return true 
    false &&  3 // return false
    true ||  3 // return true 
    false ||  3 // return 3
    
    1 || 3 // return 1
    2 || 3 // return 2
    0 || 3 // return 3 
    -1 || 3 // return -1

    既然false==0,false && 3 //return false 

    那么  false && 3 == 0 是否成立??是否return true  ?

    答案是 :false;

    因为 == 运算符优先于 && 运算符

    即先 :运算  3 == 0 // false 因为只有 false == 0 和 0 == 0;
    然后: 运算  false && false // false 

    摘抄运算符顺序表:

    综上总结简单记法:

    2 长得像 && 只有当&&前面有 0 或者 false null 或者 undefined 则返回第一项 ,其他后面不管是什么都返回 第二项

    1 长得像  | |  只有当 | | 前面有 0 或者 false  null 或者 undefined 则返回第二项 ,其他后面不管是什么都返回 第一项

    实用性
    可以避免if嵌套。例如,要问页面上某个dom绑定点击事件,我们需要先判断这个dom元素存不存在,我们可能会这样做:

    var dom = document.querySelector("#dom");
    if (dom) { dom.addEventListener("click", function() {});  }

    实际上,我们可以使用&&做一些简化:

    var dom = document.querySelector("#dom");
    dom && dom.addEventListener("click", function() {});
     
  • 相关阅读:
    一次惨痛的debug的经历-RuntimeError: CUDA error: an illegal memory access was encountered
    Rank loss调研
    守护进程 supervisor
    PHP实现异步请求非阻塞
    PHP实现图片和文字水印(PHP给图片添加水印功能)
    虚拟机相关博客
    小师妹学JavaIO之:文件系统和WatchService
    后端 Java ActionEvent getModifiers()
    Java中常见的锁简述
    关键系统的JVM参数推荐
  • 原文地址:https://www.cnblogs.com/popeyesailorman/p/7607770.html
Copyright © 2011-2022 走看看