阅读代码时对一行代码很困惑

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的值;
&& 优先级高于 ||;

转载于:https://www.cnblogs.com/ranyonsue/p/9318112.html

彻底理解js中的和||相关推荐

  1. 彻底理解js中this

    相关博文:http://blog.csdn.net/libin_1/article/details/49996815 彻底理解js中this的指向,不必硬背. 首先必须要说的是,this的指向在函数定 ...

  2. 理解js中this的指向

    彻底理解js中this的指向 JavaScript 的 this 指向问题深度解析 转载于:https://www.cnblogs.com/jeacy/p/6509616.html

  3. 深入理解Js中的this

    深入理解Js中的this JavaScript作用域为静态作用域static scope,但是在Js中的this却是一个例外,this的指向问题就类似于动态作用域,其并不关心函数和作用域是如何声明以及 ...

  4. js原型和原型链_理解JS中的原型和原型链

    导读:JavaScript中(JS)的原型和原型链是web前端开发面试中经常被问到的问题:同时,如果我们能很好的理解JS中的原型和原型链,对于控制台输出的很多信息我们也能更好的理解,而原型链也是实现继 ...

  5. 理解JS中的声明式与命令式

    理解JS中的声明式与命令式? 声明式编程 :告诉机器你想要的是什么    让机器想出去做 优缺点 : 声明式减少了可变量(Immutable Variable)的声明,程序更为安全,   代码更加简洁 ...

  6. 理解js中的面向对象

    目录 前言: 一点疑问: 1.封装 2.继承 原型链的查找机制 不容易理解的点: ----重点在最后---- 前言: js是一门面向对象的语言,但是又没有类的概念,虽然后来加入了class,但也就是个 ...

  7. 彻底理解js中this的指向

    首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ...

  8. 详细理解JS中的继承

    正式说继承之前,有两个相关小点: JS只支持实现继承,即继承实际的方法,不支持接口继承(即继承方法的签名,但JS中函数没签名) 所有对象都继承了Object.prototype上的属性和方法. 说继承 ...

  9. 理解JS中的this的指向

    原文地址:https://www.cnblogs.com/pssp/p/5216085.html#1 首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到 ...

  10. 深入理解JS中this关键字

    为什么要使用this关键字 看个例子 function indetify() {retun this.name.toUpperCase()}var obj = {name: 'zz'}indetify ...

最新文章

  1. sgdisk 磁盘操作命令
  2. PHP 调用C的代码
  3. C#的反射机制调用方法
  4. 数据结构(四)---栈的顺序存储的实现---java版
  5. STM32 F4 General-purpose Timers for Periodic Interrupts
  6. 在 Android 中调用二进制可执行程序(native executable )
  7. 架构实战项目心得(十四):spring-boot结合Swagger2构建RESTful API测试体系
  8. slopShell:强大的PHP Webshell
  9. kalipython图形界面_Kali入侵入门版笔记!!!
  10. 强大的RSS阅读器 Reeder 4 for Mac 4.1.1
  11. 模糊控制器原理笔记(附简单demo以及MATLAB相关操作)
  12. xbox360使用_适用于Xbox 360的HD-DVD Player
  13. S2B2C模式有何优势?S2B2C电商系统赋能皮革企业渠道,提升供应链管理效率
  14. 用Form 表单认证实现单点登录(Single Sign On) 作者:寒羽枫(cityhunter172)
  15. 直播预告 | 染色质免疫共沉淀(ChIP-seq)应用实例分析(表观调控和转录调控)
  16. UML建模之用例图(重点讲extend和include关系)
  17. VScode前端npm i 依赖后源代码管理器出现5k+更改文件解决办法
  18. 计算机组成原理复习提纲六(CPU结构和功能)
  19. python乒乓球比赛规则_python模拟体育竞技分析--采用乒乓球规则
  20. 怎么在谷歌地图上画图_如何在Google地图上规划具有多个目的地的公路旅行

热门文章

  1. markdown语法简明笔记
  2. 一阶低通滤波器算法实现
  3. 第十二:Pytest进阶之配置文件
  4. 【十】JDBC:使用 jmeter 批量在数据库创建 1 万多条数据;批量删除重复数据
  5. python counter_Python神奇的10个技巧
  6. redis 一般启动几个 哨兵_redis哨兵机制讲解
  7. Oracle开发环境安装与使用
  8. Javascript 时间操作汇总
  9. php 辅助函数,辅助函数 - Laravel 5.8 中文文档手册 - php中文网手册
  10. windos 为什么会突然服务停止了_女生为什么会突然说分手?