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            

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

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

  • 相关阅读:
    boost常用记录
    redis系列-redis的持久化
    分布式存储的一些概念
    搜索引擎学习-实现
    搜索引擎学习-概述
    设计模式-创建型模式(读书笔记)
    redis系列-redis的使用场景
    分布式系统设计准则
    2018/12/06 eclipse 快速加载需要的包
    2018/12/06 L1-028 判断素数 Java
  • 原文地址:https://www.cnblogs.com/feitan/p/5212243.html
Copyright © 2011-2022 走看看