• 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            

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

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

  • 相关阅读:
    函数高阶(函数,改变函数this指向,高阶函数,闭包,递归)
    案例:新增数组方法
    案例:商品查询
    案例:forEach和some区别
    ES5新增方法(数组,字符串,对象)
    案例:借用父构造函数继承属性和方法
    构造函数 和 原型
    汽车小常识别让六大汽车驾驶软肋阻碍你
    Opencv 图像增强和亮度调整<6>
    C# StringBulider用法<1>
  • 原文地址:https://www.cnblogs.com/feitan/p/5212243.html
Copyright © 2020-2023  润新知