一、JavaScript“逻辑”运算符

  1. 很多学习 JavaScript的人,容易被 JavaScript 的逻辑运算符的运算规则搞晕。为什么呢?因为
    JavaScript的逻辑运算符和其他语言(比如:javac#、c等)有着很大的不同。其他那些强类型的语言的
    逻辑运算符参数运算的都是truefalse,结果也一定是truefalse,很容器理解和记住。而JavaScript
    "逻辑运算符"参与运算的可以是任意类型,结果也可能是任意类型,规则及其复杂。所以,JavaScript中,
    他们已经不是真正的"逻辑运算符"了,所以我才给他们打上引号。

二、JavaScript中的逻辑运算符

首先说一下,其他数据类型转换为布尔类型的规则: 
null、undefined、0、NaN、空字符串转换为false,其他转化为true。 
javascript中有三种逻辑运算符:

1. 取反 ! 
首先把数据转化为布尔值,然后取反,结果为true或false

  1. <script type="text/javascript">
  2. var a = [1,2,3];
  3. var b = "hello";
  4. var obj = new Object();
  5. var d;
  6.  
  7. console.log(!"");
  8. console.log(!d);
  9. console.log(!a);
  10. console.log(!b);
  11. console.log(!obj);
  12. </script>

结果: 
 
2. 逻辑与 && 
js中逻辑与和其他语言不太一样,如果第一个操作数是true(或者能够转为true),计算结果就是第二个操作数,如果第一个操作数是false,结果就是false(短路计算),对于一些特殊数值不遵循以上规则.

  1. <script type="text/javascript">
  2. var a = [1,2,3];
  3. var b = "hello";
  4. var obj = new Object();
  5. var d;
  6.  
  7. console.log(true && 10);//第一个操作数是true,结果是第二个操作,也就是10
  8. console.log(false && b);//第一个操作数是false,结果flase
  9. console.log(100 && false);//第一个操作数是100,结果flase
  10. console.log(undefined && false);//第一个操作数是undefined,结果undefined
  11. console.log(NaN && false);//第一个操作数是NaN,结果NaN
  12. console.log(null && false);//第一个操作数是null,结果null
  13. console.log('' && false);//第一个操作数是空串,结果空串
  14. console.log(0 && 100);//结果是0
  15. console.log(5 && 100);//
  16. console.log(a && b);//hello
  17. console.log(obj && 200);//
  18. </script>

3. 逻辑或 ||

如果第一个操作数不是false,结果就是第一个操作数,否则结果是第二个操作数。如果第一个操作数能够转为true,结果就是第一个操作数

  1. <script type="text/javascript">
  2. var a = [1,2,3];
  3. var b = "hello";
  4. var obj = new Object();
  5. var d;
  6.  
  7. console.log(true || 10);//第一个操作数是true,结果是第一个操作,也就是true
  8. console.log(false || b);//第一个操作数是false,结果是第二个操作数b
  9. console.log(100 || false);//第一个操作数是100,结果100
  10. console.log(undefined || 9);//第一个操作数是undefined转false,结果9
  11. console.log(NaN || false);//第一个操作数是NaN转false,结果第二个操作数
  12. console.log(null || a);//第一个操作数是null转false,结果a
  13. console.log('' || false);//第一个操作数是空串转false,结果第二操作数
  14. console.log(0 || 100);//结果是100
  15. console.log(5 || 100);//
  16. console.log(a || b);//a
  17. console.log(obj || 200);//obj
  18. </script>

JavaScript中逻辑运算符的更多相关文章

  1. JavaScript中逻辑运算符的使用

    逻辑运算符用于对一个或多个布尔值进行逻辑运算.在JavaScript中有3个逻辑运算符,如下表所示. 运算符 描述 示例 && 逻辑与 a && b  //当a和b都为 ...

  2. javascript中逻辑运算符&&和||的返回值问题

    今天在做逻辑运算符的时候遇到一个小问题一直转不过弯来,var a=(undefined&&123)||(3||5)的返回值是什么? 首先是||的返回值问题: ||的返回值会返回最早遇到 ...

  3. javascript中运算符的优先级

    运算符优先级 JavaScript中的运算符优先级是一套规则.该规则在计算表达式时控制运算符执行的顺序.具有较高优先级的运算符先于较低优先级的运算符执行.例如,乘法的执行先于加法. 下表按从最高到最低 ...

  4. JavaScript中的运算符种类及其规则介绍

    JavaScript中的运算符有很多,主要分为算术运算符,等同全同运算符,比较运算符,字符串运算符,逻辑运算符,赋值运算符等.这些运算符都有一些属于自己的运算规则,下面就为大家介绍一下JavaScri ...

  5. 谈 JavaScript 中的强制类型转换 (2. 应用篇)

    这一部分内容是承接上一篇的, 建议先阅读谈 JavaScript 中的强制类型转换 (1. 基础篇) 前两章讨论了基本数据类型和基本包装类型的关系, 以及两个在类型转换中十分重要的方法: valueO ...

  6. JavaScript中“&&”和“||”操作符的意义,深入理解和使用场景

     一.概念 与其他语言不同,在js中,逻辑运算符可以返回任何类型的数据,不仅仅是true和false. &&和||的返回值是两个操作数的其中一个.即a&&b或者a||b ...

  7. 详细理解javascript中的强制类型转换

    将值从一种类型转换为另一种类型通常称为类型转换,这是显式的情况:隐式的情况称为强制类型转换,JavaScript 中的强制类型转换总是返回标量基本类型值,如字符串.数字和布尔值. 如何理解: 类型转换 ...

  8. JavaScript中字符串类型

    字符串类型 字符串介绍 这是程序里面使用最为广泛的一-种类型.在JavaScript里面, 可以使用单引号,也可以使用双引号: 字符串这种数据类型非常霸道,它和其他数据类型相加都会被转换后才为字符串类 ...

  9. JavaScript中的运算符和语句

    一.JavaScript的运算符 a.基本的算术运算符(+.-.*./.%) -.*./.%运算符会在必要的时候将操作数转换为数字,无法转换成数字的操作数将会转换成NaN,相应的运算结果也是NaN. ...

随机推荐

  1. 【动态规划/二维背包问题】mr355-三角形牧场

    应该也是USACO的题目?同样没有找到具体出处. [题目大意] 和所有人一样,奶牛喜欢变化.它们正在设想新造型牧场.奶牛建筑师Hei想建造围有漂亮白色栅栏的三角形牧场.她拥有N(3≤N≤40)块木板, ...

  2. MySort

    实验概述: 本次试验的内容:模拟实现Linux下Sort -t : -k 2的功能.参考Sort的实现.提交码云链接和代码运行截图. 截图如下 实验过程 在实验课上真的很崩溃,可以说脑子里一团乱麻,下 ...

  3. SpringBoot整合Mybatis多数据源 (AOP+注解)

    SpringBoot整合Mybatis多数据源 (AOP+注解) 1.pom.xml文件(开发用的JDK 10) <?xml version="1.0" encoding=& ...

  4. linux shell实现随机数多种方法(date,random,uuid)

    参考: http://www.cnblogs.com/chengmo/archive/2010/10/23/1858879.html $ cat /proc/sys/kernel/random/uui ...

  5. sSkinProvider.pas

    unit sSkinProvider;{$I sDefs.inc}{.$DEFINE LOGGED} interface uses Windows, Messages, SysUtils, Class ...

  6. iOS-Runtime、对象模型、消息转发

    Objective-C只是在C语言层面上加了些关键字和语法.真正让Objective-C如此强大的是它的运行时.它很小但却很强大.它的核心是消息分发. Message 执行一个方法,有些语言.编译器会 ...

  7. Afreechart很强大的图表库,支持股票曲线图,饼图,曲线

    Afreechart是一个很强大的图表库,支持股票曲线图,饼图,曲线等.源码下载:http://www.23code.com/afreechart/

  8. 三种主流的Web服务实现方案(REST+SOAP+XML-RPC)简述及比较

    目前知道的三种主流的Web服务实现方案为:REST:表象化状态转变 (软件架构风格)SOAP:简单对象访问协议 XML-RPC:远程过程调用协议 下面分别作简单介绍: REST:表征状态转移(Repr ...

  9. Android-Universal-Image-Loader载入图片

    直接看代码:MainActivity: package com.example.textwsjdemo; import com.nostra13.universalimageloader.cache. ...

  10. LINUX提权后获取敏感信息之方法

    文中的每行为一条命令,文中有的命令可能在你的主机上敲不出来,因为它可能是在其他版本的linux中所使用的命令. 列举关键点 (Linux)的提权是怎么一回事:  收集 – 枚举,枚举和一些更多的枚举. ...