zoukankan      html  css  js  c++  java
  • 你不知道的JavaScript(八)逻辑运算

    JS的逻辑运算结果和其他一些强类型语言差别比较大,也比较容易让人产生困惑,看下面的例子:

        <script type="text/javascript">
            var a = 40;
            var b = "hello";
            alert(!!a);//true
            alert(!!b);//true
            alert(a && b);//alert hello
        </script>

    我们定义两个变量a、b,对a、b进行两次取反获取它们转换成boolean类型的值均为true。然后將变量a和变量b做逻辑运算,发现结果竟然不是true,而是”hello”。

    为了明确JS逻辑运算的最终结果是怎样的,我们需要先了解一下JS中哪些类型的值在做逻辑判断的时候会被认为是false。

    • 空字符串""
    • 数值类型(number)中的0和NaN
    • null类型
    • undefined类型
    • boolean类型中的false
        <script type="text/javascript">
            //alert false
            if(""|| 0 || null || undefined || NaN || false )
            {
                alert(true);
            }else
            {
                alert(false);
            }
        </script>

    执行上面代码对话框中弹出false,其他值在逻辑判断时均被认为是true。

    接下来在来解释逻辑运算符||和&&的返回结果是怎么一回事:

    事实上,JS以参与逻辑运算的最后一个值作为本次逻辑运算的最终结果,这句话理解起来可能有点困难,我们来看看下面的例子:

            var num1 = 40;
            var str1 = "hello";
            alert(num1 || str1);//40
            alert(num1 && str1);//hello
    

    大家都知道 || 运算符是”一真则真”,num1转换为boolean类型为true,已经有一个”true”了,所以 || 运算符后面的部分没有被执行,也就是说str1根本就没有参与该逻辑运算。JS会把num1的值作为本次逻辑运算的结果。

    而逻辑运算符&&则是”一假则假”,num1转换为boolean类型为true,能够决定该逻辑运算结果转换为boolean类型真假的是str1。所以JS以str1作为该逻辑运算的结果。

    有了这些依据下面的逻辑运算结果就很容易判断了:

            var num2 = 0;
            var str2 = "wrold";
            alert(num2 || str2);//hello
            alert(num2 && str2);//0
    
            var num3 = 40;
            var str3 = "";
            alert(num3 || str3);//40
            alert(num3 && str3);//""

    num2值为0,转换成boolean类型为false, num2 || str2逻辑运算的结果由str2决定。num2 && str2逻辑运算中num2 已经为假,str2未参与逻辑运算,所以以num2作为该逻辑运算的结果。下面的一个例子也是同样的道理。

  • 相关阅读:
    Oracle 删除重复数据的几种方法
    12.25模拟赛T3
    java实现第五届蓝桥杯圆周率
    java实现第五届蓝桥杯武功秘籍
    Oracle 审计初步使用
    [CERC2017]Intrinsic Interval——扫描线+转化思想+线段树
    ORA-12012 Error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_<NN> in 12.2.0 Database
    12.25模拟赛T2
    java实现第五届蓝桥杯写日志
    java实现第五届蓝桥杯李白打酒
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468796.html
Copyright © 2011-2022 走看看