zoukankan      html  css  js  c++  java
  • JavaScript的Boolean逻辑运算探究

    相信每个用JS的人都会经常遇到巧用逻辑运算符简化代码的情形:

    evnt=evnt || window.event;
    
    ...
    
    var obj = unKnownObj1&&unKnownObj2&&unKnownObj3;

    这些逻辑运算符的原理是什么呢?我动手测试了一下,做一个总结。

    首先,需要把JS的类型转换机制引进来。其他数据类型ToBoolean的结果先放到这里:

    • udefined、null结果是false。
    • Number如果参数为 +0, -0 或 NaN,则结果为 false;否则为 true。
    • String如果参数为空字符串,则结果为 false;否则为 true。
    • Object结果都是true,注意空Object也是true。

    然后,回顾一下逻辑运算符有哪几个,这肯定都不陌生,因为其他语言里都有,分别是与&&,或||,非!。

    先说非!运算符,假变真,真变假,最后的结果是Boolean值,即true|false。

    再来说剩下两个,他们的返回值不一定是true|false,有Object时返回结果更是五花八门的,网上总结各种规律也不太好记。其实从问题根本探究JS还是很按套路出牌的,产生迷惑的真正原因是&&和||返回值并没有做布尔转换,JS的类型转换是在运算时自动完成的,所以这种做法其实非常合理并且提供了很大灵活。

    以&&为例,如何实现最后一个返回值代表整个表达式的值呢?那就是“返回遇到的第一个假值,如果都为真,返回最后一个值”。试试看是不是这样呢?

                    console.log("sss"&&false); //false
                    console.log(""&&true);     //""
                    console.log("1"&&5);       //5

    因为所有的Object都是true,所以带Object道理也是一样。

                    console.log(obj&&false); //false
                    console.log(1&&obj);     //obj
                    console.log(obj&&obj2);  //obj2            

    因此就可以利用&&实现判断元素不为空再取值(开头例子)。

    ||也是类似的,返回遇到的第一个真值,如果都为假,返回最后一个值。就不举例了。

  • 相关阅读:
    POJ 1681 Painter's Problem(高斯消元法)
    HDU 3530 Subsequence(单调队列)
    HDU 4302 Holedox Eating(优先队列或者线段树)
    POJ 2947 Widget Factory(高斯消元法,解模线性方程组)
    HDU 3635 Dragon Balls(并查集)
    HDU 4301 Divide Chocolate(找规律,DP)
    POJ 1753 Flip Game(高斯消元)
    POJ 3185 The Water Bowls(高斯消元)
    克琳:http://liyu.eu5.org
    WinDbg使用
  • 原文地址:https://www.cnblogs.com/feitan/p/5212243.html
Copyright © 2011-2022 走看看