彻底理解js中的&&和||
阅读代码时对一行代码很困惑
step > max_step && (step = min_step);
查阅资料后发现它等价于
if (step > max_step) {
step = min_step;
}
js中的&&和||本质是什么呢?
&& 和 || 的作用只有一个(定义):
进行布尔值的且和或的运算。当运算到某一个变量就得出最终结果之后,就返回哪个变量。
在javascript中:
以下内容会被当成false处理:"" , false , 0 , null , undefined , NaN
其他都是true。注意:字符串"false"也会被当做true处理,在未转型的情况下他是字符串,属于一个对象,所以是true。
所以:
a || b:如果a是true,那么b不管是true还是false,都返回true。因此不用判断b了,这个时候刚好判断到a,因此返回a。
如果a是false,那么就要判断b,如果b是true,那么返回true,如果b是false,返回false,其实不就是返回b了吗。
a && b:如果a是false,那么b不管是true还是false,都返回false,因此不用判断b了,这个时候刚好判断到a,因此返回a。
如果a是true,那么就要在判断b,和刚刚一样,不管b是true是false,都返回b。
来个复杂的例子(注意一点:在js中&&运算符优先级大于||)
假设:
var a=new Object(),b=0,c=Number.NaN,d=1,e="Hello";
alert(a || b && c || d && e); 表达式从左往右执行,先&&后||
1、(b && c):b是false,此时不需要判断c,因为不管c是true是false,最终结果一定是false,因此返回当前判断对象b,也就是0;
2、(d && e):d是true,这个时候判断e,此时不管e是true,是false,返回结果一定是e,e为true,因此返回"Hello";
3、(a || b):a是true,此时不管b是true是false,结果都是true,所以不判断b,所以返回当前判断对象a,因此返回new Object();
4、(a || e):同上,因此返回a。
这个表达式最终结果为a,也就是new Object()
结论:
a&& b :如果执行a后返回true,则执行b并返回b的值;如果执行a后返回false,则整个表达式返回a的值,b不执行;
a || b :如果执行a后返回true,则整个表达式返回a的值,b不执行;如果执行a后返回false,则执行b并返回b的值;
&& 优先级高于 ||;
彻底理解js中的&&和||的更多相关文章
- 怎么理解js中的事件委托
怎么理解js中的事件委托 时间 2015-01-15 00:59:59 SegmentFault 原文 http://segmentfault.com/blog/sunchengli/119000 ...
- 如何更好的理解js中的this,分享2段有意思的代码
关于js中this的浅析,大家可以点击[彻底理解js中this的指向,不必硬背]这篇博客了解. 今天遇到2段比较有意思的代码. ----------------第一段----------------- ...
- 图文结合深入理解 JS 中的 this 值
图文结合深入理解 JS 中的 this 值 在 JS 中最常见的莫过于函数了,在函数(方法)中 this 的出现频率特别高,那么 this 到底是什么呢,今天就和大家一起学习总结一下 JS 中的 th ...
- 深度理解js中var let const 区别
首先要理解js中作用域的概念 作用域:指的是一个变量的作用范围 1.全局作用域 直接写在script中的js代码,在js中,万物皆对象,都在全局作用域,全局作用域在页面打开时创建,在全局作用域中有一个 ...
- 如何理解js中的this和实际应用中需要避开哪些坑
this是什么 this就是函数内部的关键字 看下面例子理解js中的this // 例子1 function fnOne () { console.log(this) } 'use strict' f ...
- 深入理解JS中的对象(二):new 的工作原理
目录 序言 不同返回值的构造函数 深入 new 调用函数原理 总结 参考 1.序言 在 深入理解JS中的对象(一):原型.原型链和构造函数 中,我们分析了JS中是否一切皆对象以及对象的原型.原型链和构 ...
- 深入理解JS中的对象(三):class 的工作原理
目录 序言 class 是一个特殊的函数 class 的工作原理 class 继承的原型链关系 参考 1.序言 ECMAScript 2015(ES6) 中引入的 JavaScript 类实质上是 J ...
- 深入理解Js中的this
深入理解Js中的this JavaScript作用域为静态作用域static scope,但是在Js中的this却是一个例外,this的指向问题就类似于动态作用域,其并不关心函数和作用域是如何声明以及 ...
- 彻底理解js中this的指向,不必硬背。
首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ...
- js笔记——理解js中的call及apply
call及apply在js里经常碰得到,但一直感觉很陌生,不能熟练使用.怎样才能熟练应用呢? 为什么存在call和apply? 在javascript OOP中,我们经常会这样定义: function ...
随机推荐
- oracle中row_number() over()
ROW_NUMBER() OVER函数的基本用法语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)简单的说row_number()从1开 ...
- js控制随机数生成概率代码实例
基本思路:把Math.random()js随机数生成的数看着百分比,然后定义每个整数值取值范围. 具体内容如下,供大家参考 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- 大事记 - 安卓微信浏览器 video 标签层级过高
// 为什么叫<大事记>? // 以前总有面试官问这样一个问题:“你在项目中遇到过最头疼的问题是什么,是怎么解决的?” // 当时总觉得,已解决的问题都算不上头疼,所以回答总是不尽人意. ...
- Thinkphp5多数据库切换
在项目开发中需要Thinkphp5读取多个数据库的数据,本文详细介绍Thinkphp5多数据库切换 一.在database.php配置默认数据库连接 'type' => 'm ...
- html/css更改子级继承的父级属性
一个精美的网页需要的样式很多,在父级上设置的字体颜色或者大小,在其子元素中不一定全部相同,这时候要更改其中某一项的样式怎么办呢. 很多新手朋友就不明白,会迷惑为什么我使用class单独命名了,重新设置 ...
- Angular的12个经典问题,看看你能答对几个?(文末附带Angular测试)
Angular作为目前最为流行的前端框架,受到了前端开发者的普遍欢迎.不论是初学Angular的新手,还是有一定Angular开发经验的开发者,了解本文中的12个经典面试问题,都将会是一个深入了解和学 ...
- Android性能优化问题总结
性能优化这块,分为UI性能优化.内存优化.数据库优化.网络优化.耗电优化等等.可以从1.如何发现问题,2.怎么解决问题,3.解决效果对比,这几个方面去描述.举个简单例子——UI优化,可以从 UI出现什 ...
- 使用C#+PowerShell进行Windows系统间文件传输
新的winserver2016支持了一种nano模式,像以前的core模式,只能远程管理,只支持x64,只有610M,不让CentOS mini版独美. 这个nano版,默认只开启WinRM,所以只能 ...
- SQL 中事务的分类
先讲下事务执行流程: BEGIN和COMMIT PRINT @@TRANCOUNT --@@TRANCOUNT统计事务数量 BEGIN TRAN PRINT @@TRANCOUNT BEGIN TRA ...
- Windows Server 2012更新补丁后导致Micosoft ODBC for Oracle出现问题
上周由于WannaCry勒索病毒肆虐全球,14号系统管理员更新了一系列补丁后,导致一Windows Server 2012服务器上面部署的一些老旧的应用无法使用Microsoft ODBC for O ...