zoukankan      html  css  js  c++  java
  • js中关于|| 和&& 以及!的理解

    在JavaScript逻辑运算中,0、""、null、false、undefined、NaN都会判为false,其他都为true;

    在JavaScript运算过程中,首先js 会将 && 和||  两边的值转成Boolean 类型,然后再算值 ,&&运算如果返回true,则取后面的值,如果|| 返回true,则取前面的值,

    转换规则:

    对象为true;

    非零数字为true;

    非空字符串为true;

    其他为false;

    1、只要“||”前面为false,无论“||”后面是true还是false,结果都返回“||”后面的值。

    2、只要“||”前面为true,无论“||”后面是true还是false,结果都返回“||”前面的值。

    3、只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;

    4、只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值;

    逻辑运算符,“||”和“&&”都是遵行短路原则,只要确定符号前面的真假,既可确定返回值。

    需要说明的是“&&”的优先级是高于“||”的;

    odi = odi|| attr; //如果foo存在,值不变,否则把bar的值赋给foo

    等于

    if(!odi){
        odi= attr;
    }

    为什么if(!odi),为什么不直接写if(odi)?
    其实这是一种更严谨的写法:!的作用是把一个其他类型的变量转成的bool类型。
    可以测试选 typeof 5和typeof !5的区别,返回的分别是number和boolean;

    补充:

    原来不理解类似下面这句表达式:

    (a>8) || (b+=a);

    其实和上面的或运算的理解一样的,如果a>8为真,则不执行b+=a;如果a>8为false,则执行b+=a;

    测试脚本如下:

    当a>8是,打印结果为1;当a≤8时,打印结果为a+1;

            function test(a){
                var b=1;
                    // if(a>6){
                    //     b=b+a;
                    //     alert(b);
                    // }
                (a>8) || (b+=a);
                alert(b);
            }
            window.onload = function(){
                test(9);
            }
  • 相关阅读:
    vue中使用ztree时报找不到init方法错的解决方案
    element-ui 自定义表单验证 , 但是不出现小红心解决方案
    iframe子页面与父页面之间通信
    GSS系列题解——最大子段和系列
    平衡树 区间树 学习
    数据结构:从入门到精通
    后缀数组
    2019元旦总结,迎接2019
    网络流+费用流 学习
    SLT学习——leafes tree扩展 【文艺平衡树】
  • 原文地址:https://www.cnblogs.com/wjx91/p/5495011.html
Copyright © 2011-2022 走看看