zoukankan      html  css  js  c++  java
  • ||和 && 符号的赋值运用(转)

    你是否看到过这样的代码:a=a||""; 可能javascript初学者会对此感到茫然。今天就跟大家分享一下我的一些心得。

    其实:

    Js代码  收藏代码
    1. a=a||"defaultValue";  

     与:

    Js代码  收藏代码
    1. if(!a){  
    2.     a="defaultValue";  
    3. }  

     和:

    Js代码  收藏代码
    1. if(a==null||a==""||a==undefined){  
    2.     a="defaultValue";  
    3. }  

     是等价的!

    为了弄清这个问题,首先我们必须了解一个问题:javascript中数据类型在转换为bool类型时发生了什么。

    在javascript中,数据类型可以分为“真值”和“假值”。顾名思义,真值转换为bool时值为true;假值转换为bool时值为false。下表罗列了一些常见的数据类型转换为bool时的值:

    数据类型 转换为bool后的值
    null FALSE
    undefined FALSE
    Object TRUE
    function TRUE
    0 FALSE
    1 TRUE
    0、1之外的数字 TRUE
    字符串 TRUE
    ""(空字符串) FALSE

    在if表达式中,javascript首先将条件表达式转换为bool类型,表达式为真值则执行if中的逻辑,否则跳过。

    于是有了:

    Js代码  收藏代码
    1. if(!a){  
    2.     a="defaultValue";  
    3. }  

    下面我们再来看“&&”、“||”两个表达式。

    由于javascript是弱类型语言,所以在javascript中这两个表达式可能跟其他语言(比如java)中不太一样。

    在javascript中,“&&”运算符运算法则如下:

    如果&&左侧表达式的值为真值,则返回右侧表达式的值;否则返回左侧表达式的值。

    这就是说:

    Js代码  收藏代码
    1. var i=""&&"真值";//->i=""  
    2. i="真值"&&"其他真值";//->i="其他真值"  
    3. i="真值"&&"";//->i=""  

    “||”运算符的运算法则如下:

    如果||左侧表达式的值为真值,则返回左侧表达式的值;否则返回右侧表达式的值。

    这就是说:

    Js代码  收藏代码
    1. var i=""||"真值";//->i="真值"  
    2. i="真值"||"其他真值";//->i="真值"  
    3. i="真值"||"";//->i="真值"  

    于是,就可以理解:

    Js代码  收藏代码
    1. a=a||"defaultValue";  

    的逻辑了。如果a为假值(等于null、空字符串……),则将"defaultValue"赋给a;否则将a的值赋给a本身。

    下面我们运用||、&&来简化程序:

    Js代码  收藏代码
      1. var parameter="";  
      2. function test(parameter){  
      3.     //return 真值  
      4.     return true;  
      5. }  
      6.   
      7. //真值操作  
      8. function operate1(parameter){  
      9.     return "真值操作";  
      10. }  
      11.   
      12. //假值操作  
      13. function operate2(parameter){  
      14.     return "假值操作";  
      15. }  
      16.   
      17. var result=test(parameter)&&operate1(parameter);  
      18. result=test(parameter)||operate2(parameter);  
      19.   
      20. //等价于  
      21. result=test(parameter)?operate1(parameter):operate2(parameter);  
      22.   
      23. alert(result);//真值操作  
      24.   
      25. //也等价于  
      26. if(test(parameter)){  
      27.     result=operate1(parameter);  
      28. }else{  
      29.     result=operate2(parameter);  
      30. }  
      31.   
      32. alert(result)//真值操作 

    example:

    var a = 3;
        var b;
        b = a || 7;
        alert(b);
        
        c = a && 9;
        alert(c);

    当a为真时(即a的值不为空,不为false,不为null),b的值为||左侧的值,当为假时,就为右侧的值。而&&符号刚好相反。

  • 相关阅读:
    Spring Boot2 系列教程(二十)Spring Boot 整合JdbcTemplate 多数据源
    Spring Boot 如何给微信公众号返回消息
    Spring Boot2 系列教程(十九)Spring Boot 整合 JdbcTemplate
    Spring Boot2 系列教程(十八)Spring Boot 中自定义 SpringMVC 配置
    Spring Boot 开发微信公众号后台
    Spring Boot2 系列教程(十七)SpringBoot 整合 Swagger2
    Spring Boot2 系列教程(十六)定时任务的两种实现方式
    Spring Boot2 系列教程(十五)定义系统启动任务的两种方式
    Spring Boot2 系列教程(十四)CORS 解决跨域问题
    JavaScript二维数组
  • 原文地址:https://www.cnblogs.com/xingmeng/p/3248178.html
Copyright © 2011-2022 走看看