通常来说逻辑运算a&&b和a||b分别是逻辑与运算和逻辑或运算,返回的是一个布尔值,要么为true,要么为false。
比如在PHP里面a&&b返回类型永远是布尔值,非true即false。
而Javascript中中&& ||是一个陷阱,JS里面的&&和||有点不走寻常路。
总结JS && ||的规律:下面的a和b分别可以是一个值、一个变量、一个表达式。
  • JS对于逻辑与运算a&&b,如果a不成立(运算后结果是false,null,'',0,undefined等值,下同)则返回a,如果a成立则返回b,如果使用&&连接了多个表达式,如果每个表达式都成立,则返回最后一个表达式的运算结果,如果有至少一个不成立,则返第一个不成立的表达式的运算结果
  • JS对于逻辑或运算a||b,则是从左边开始,返回第一个成立的表达式的运算结果,如果全部不成立则返回最后一个表达式的运算结果。
  • &&优先级高于||,先运算&&再用&&运算的结果去||运算。
看以下代码
var a=0&&-1 //得到0
var b=3&&4; //得到4
var c=0&&1&&2; //得到0
var d=1&&0&&2; //得到0
var e=1&&2&&3//得到3
var f=0&&false&&''&&1 //返回0
var g=0||1; //得到1
var h=1||0; //得到1alert(typeof(0||false||''));//返回string
var i=1||2&&3 //返回1
var j=1&&2||3 //返回2
 
 

JS && || 陷阱 javascript 逻辑与、逻辑或 【转】的更多相关文章

  1. 研究分析JS中的三种逻辑语句

    JS中的三种逻辑语句:顺序.分支和循环语句. 一.顺序语句 代码规范如下:1. <script type="text/javascript"> var a = 10;  ...

  2. 松软科技web课堂:JavaScript 布尔(逻辑)

    JavaScript 布尔(逻辑)代表两个值之一:true 或 false. 布尔值 通常,在编程中,您会需要只能有两个值之一的数据类型,比如 YES / NO ON / OFF TRUE / FAL ...

  3. JS中 逻辑或 || 逻辑与 && 的使用方法总结

    JS中 逻辑或 || 逻辑与 && 的使用方法总结 //1.在if判断中 //if(1==1 || 2==3){}//->两个条件中只要有一个条件为真,整体就为真 "或 ...

  4. js 动态添加元素 删除元素逻辑

    js 动态添加元素 删除元素逻辑 var obox=document.getElementById("box"); oadd.onclick=function(){ var odi ...

  5. 了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发)

    了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发) Guillermo Rauch 编   赵静 译 ISBN 978-7-121-21769-2 2 ...

  6. 新手怎么学JS?JavaScript基础入门

    新手应该怎么学习JS?JavaScript入门 - 01 准备工作 在正式的学习JavaScript之前,我们先来学习一些小工具,帮助我们更好的学习和理解后面的内容. js代码位置 首先是如何编写Ja ...

  7. [JS]使用JavaScript实现简易俄罗斯方块

    [JS]使用JavaScript实现简易俄罗斯方块 首先,大家可以点击此处来预览一下游戏效果,随后将会以此为模板讲解如何使用JavaScript实现这样一个简易的俄罗斯方块项目(以下简称"该 ...

  8. [JS]jQuery,javascript获得网页的高度和宽度

    [JS]jQuery,javascript获得网页的高度和宽度网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeigh ...

  9. Rainyday.js – 使用 JavaScript 实现雨滴效果

    Rainyday.js 背后的想法是创建一个 JavaScript 库,利用 HTML5 Canvas 渲染一个雨滴落在玻璃表面的动画.Rainyday.js 有功能可扩展的 API,例如碰撞检测和易 ...

随机推荐

  1. 【大数据系统架构师】0.3 MySQL数据库

    1. MySQL的基本操作 2. SQL语句 3. 高级查询 1)聚合函数.分组查询 2)联合查询.连接查询 3)子查询 4. 高级应用 1)视图与索引 2)数据可视化管理 5. 使用JDBC操作数据 ...

  2. vim文本编辑

    6.1 vi/vim 的使用 基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),插入模式(Insert mode)和底线命令模式(Last line mode). 6. ...

  3. Ubuntu下安装部署MongoDB以及设置允许远程连接

    最近因为项目原因需要在阿里云服务器上部署MongoDB,操作系统为Ubuntu,网上查阅了一些资料,特此记录一下步骤. 1.运行apt-get install mongodb命令安装MongoDB服务 ...

  4. 最短路径 Dijkstra算法 AND Floyd算法

    无权单源最短路:直接广搜 void Unweighted ( vertex s) { queue <int> Q; Q.push( S ); while( !Q.empty() ) { V ...

  5. SLAM入门必收藏的资料

    搜集了各大网络,请教了SLAM大神,终于把SLAM的入门资料搜集全了!在分享资料前,我们先来看看,SLAM技术入门前需要具备哪些知识?首先学习SLAM需要会C和C++,网上很多代码还用了11标准的C+ ...

  6. tp5 路由定义

    路由定义 | Route::rule('路由表达式','路由地址','请求类型'); > route 目录下的任何路由定义文件都是有效的,默认的路由定义文件是 route.php > 可以 ...

  7. JAVA数据结构--LinkedList双向链表

    链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两个部分: ...

  8. vue 中引用 百度地图

    1.在 http://lbsyun.baidu.com/ 申请 秘钥 2.在index.html文件中引入 <script src="http://api.map.baidu.com/ ...

  9. HDU - 1907 anti-SG

    题意:nim游戏,最后取光为[输] anti-SG的应用,搬运一下我的摸鱼小笔记 最先看到的应该是分奇偶的非充裕堆判断,若为偶数则先手胜,否则后手胜 按SG分类 SG!=0时 1.只有一堆大于1,先手 ...

  10. vue 同一个组件的跳转, 返回时保留原来的下拉位置

    1,需求分析 公司的项目有这样一个需求: 同一个list组件,根据传过来的listId渲染成多个页面,每个页面都可以下拉.在返回到不同的list页面时,要保留当时下拉的位置. 说的我自己都有点懵逼了, ...