js教程逻辑运算又称布尔代数,就是布尔值(true 和 false)的“算数”运算。逻辑运算符包括:逻辑与&&、逻辑或||和逻辑非!

逻辑与运算

逻辑与运算(&&)是 AND 布尔操作。只有两个操作数都为 true 时,才返回 true,否则返回 false。具体描述如表所示。

逻辑与运算 第一个操作数 第二个操作数 运算结果 true true true true false false false true false false false false
逻辑与是一种短路逻辑,如果左侧表达式为 false,则直接短路返回结果,不再运算右侧表达式。运算逻辑如下:

  • 第 1 步:计算第一个操作数(左侧表达式)的值。
  • 第 2 步:检测第一个操作数的值。如果左侧表达式的值可转换为 false(如 null、undefined、NaN、0、""、false),那么就会结束运算,直接返回第一个操作数的值。
  • 第 3 步:如果第一个操作数可以转换为 true,则计算第二个操作数(右侧表达式)的值。
  • 第 4 步:返回第二个操作数的值。

示例1

下面代码利用逻辑与运算检测变量并进行初始化。

var user;  //定义变量
(! user && console.log("没有赋值"));  //返回提示信息“没有赋值”

等效于:

var user;  //定义变量
if (! user){  //条件判断console.log("变量没有赋值");
}

如果变量 user 的值为 0 或空字符串等假值转换为布尔值时,则为 false,那么当变量赋值之后,依然提示变量没有赋值。因此,在设计时必须确保逻辑与左侧的表达式返回值是一个可以预测的值。

var user = 0;  //定义并初始化变量
(! user && console.log("变量没有赋值"));  //返回提示信息“变量没有赋值”

本篇文章由 泉州SEO www.234yp.com 整理发布,js教程 www.234yp.com/Article/188241.html 谢谢合作!
右侧表达式不应该包含赋值、递增、递减和函数调用等有效运算,因为当左侧表达式为 false 时,则直接跳过右侧表达式,会给后面的运算带来潜在影响。

示例2

使用逻辑与运算符可以代替设计多重分支结构。

var n = 3;
(n == 1) && console.log(1);
(n == 2) && console.log(2);
(n == 3) && console.log(3);
( ! n ) && console.log("null");

上面代码等效于下面多重分支结构。

var n = 3;
switch(n){case1:console.log(1);break;case2:console.log(2);break;case3:console.log(3);break;default:console.log("null");

逻辑与运算的操作数可以是任意类型的值,并返回原始表达式的值,而不是把操作数转换为布尔值再返回。

1) 对象被转换为布尔值时为 true。例如,一个空对象与一个布尔值进行逻辑与运算。

console.log(typeof ({} && true));  //返回第二个操作数的值  true的类型:布尔型
console.log(typeof (true && {}));  //返回第二个操作数的值  {}的类型:对象

2) 如果操作数中包含 null,则返回值总是 null。例如,字符串 "null" 与 null 类型值进行逻辑与运算,不管位置如何,始终都返回 null。

console.log(typeof ("null" && null));  //返回null的类型:对象
console.log(typeof (null && "null"));  //返回null的类型:对象

3) 如果操作数中包含 NaN,则返回值总是 NaN。例如,字符串 "NaN" 与 NaN 类型值进行逻辑与运算,不管位置如何,始终都返回 NaN。

console.log(typeof ("NaN" && NaN));  //返回NaN的类型:数值
console.log(typeof (NaN && "NaN"));  //返回NaN的类型:数值

4) 对于 Infinity 来说,将被转换为 true,与普通数值一样参与逻辑与运算。

console.log(typeof ("Infinity" && Infinity));  //返回第二个操作数Infinity的类型:数值
console.log(typeof (Infinity && "Infinity"));  //返回第二个操作数"Infinity"的类型:字符串

5) 如果操作数中包含 undefined,则返回 undefined。例如,字符串 "undefined" 与 undefined 类型值进行逻辑与运算,不管位置如何,始终都返回 undefined。

console.log(typeof ("undefined" && undefined));  //返回undefined
console.log(typeof (undefined && "undefined"));  //返回undefined

关于更多js教程内容,可以收藏本网页。
厦门财经厦门财经网是厦门新闻门户网

JS (与运算)详解相关推荐

  1. js_long.php,protobuf.js 与 Long.js的使用详解

    这次给大家带来protobuf.js 与 Long.js的使用详解,是急用protobuf.js 与 Long.js的注意事项有哪些,下面就是实战案例,一起来看一下. protobuf.js的结构和w ...

  2. Js apply 方法 详解

    Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这 ...

  3. Js apply()使用详解

    Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这 ...

  4. Js apply方法详解

    Js apply方法详解 主要解决一下几个问题: apply和call的区别在哪里 什么情况下用apply,什么情况下用call apply的其他巧妙用法(一般在什么情况下可以使用apply) 首先从 ...

  5. php和js调试,JS调试使用详解

    这次给大家带来JS调试使用详解,JS调试的注意事项有哪些,下面就是实战案例,一起来看一下. 试想一下:出现了某个bug,有人用几分钟就搞定了,有人用了半天或者一天都找不到原因所在.你愿意当前者还是后者 ...

  6. (转)C语言位运算详解

    地址:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html C语言位运算详解 作者:911 说明:本文参考了http://www2.ts ...

  7. 位运算详解+竞赛常见用法总结

    目录 一.位运算详解 二.位运算应用 1.快速幂 2.给定一个数组A, 长度为n,求下面这段程序的值 3.数数字 4.数数字 2 5.nim博弈问题: 6.树状数组 7.判断一个数x是不是2的某次方 ...

  8. python开方运算符_Pytorch Tensor基本数学运算详解

    1. 加法运算 示例代码: import torch # 这两个Tensor加减乘除会对b自动进行Broadcasting a = torch.rand(3, 4) b = torch.rand(4) ...

  9. 《Node.js开发实战详解》学习笔记

    <Node.js开发实战详解>学习笔记 --持续更新中 一.NodeJS设计模式 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直 ...

  10. highlight.js css,JS库之Highlight.js的用法详解

    下载到本地后,新建个页面测试 1.在head中加入css和js的引用 highlight hljs.initHighlightingOnLoad(); 2.添加对应要显示的内容 # 读取文件内容 de ...

最新文章

  1. 截取视图某一段另存为部分视图(Partial View)
  2. SQL Server中的几个方法和Transact SQL 常用语句以及函数[个人推荐]
  3. java 执行cd_Java调用Linux命令(cd的处理)
  4. ERROR: missing Change-Id in commit message footer
  5. NYOJ90 整数划分(经典递归和dp)
  6. pycharm自带python环境_Pycharm安装+python安装+环境配置
  7. 游戏开发中的数学和物理算法(7):角度 vs 弧度
  8. 【详细说明】nginx反向代理wss websocket
  9. Web Visibilitychange
  10. UCOSII学习笔记[开篇]
  11. 第15天android:使用sqlite
  12. 【算法学习】【图像增强】【Retinex】White Patch Retinex
  13. 文件夹批量重命名的小技巧
  14. 阿里云(飞天)里的 盘古
  15. EFI Driver Model(中)-PCI 驱动设计
  16. 电脑蓝屏怎么办?一分钟教你修好
  17. rls算法matlab实现,第5章基于RLS算法的数据预测与MATLAB实现MATLAB实现.PDF
  18. 计算机科学计算矩阵答案,计算机科学计算答案.doc
  19. STM32 - ADC采集电压 中断处理
  20. vh布局移动端软键盘弹起改变高度问题

热门文章

  1. 【Java】深入理解Java虚拟机的读书笔记
  2. 拆轮子系列--RxJava理解(一)--Map解析
  3. 您企业的邮件系统够安全吗
  4. java的多线程机制(文字描述区别)
  5. 蔡先生论道大数据之六 : 打破对“精准性”的执着
  6. ORA-19504,乌龙处理
  7. HOWTO:FirePHP乱码问题解决
  8. 浅谈当前电信检测宽带共享的机制
  9. 移动12.1号动感地带寻宝答案
  10. 浅水声信道模型的建立(1)----只考虑海面海底一次散射,多亮点研究