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

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. .net Windows服务程序和安装程序制作图解
  2. Linux gsoap 访问Jira
  3. Linux---系统日志
  4. Redis在Linux上编译
  5. boost::stl_interfaces模块实现过滤的整数迭代器的测试程序
  6. 清除element残留表单校验
  7. System.Diagnostics.Process 执行.EXE
  8. 03.结构化机器学习项目 W1.机器学习策略(1)
  9. 杨森翔书法-明月双溪水
  10. 幽冥问答录:兼职阴间判官介绍阴间是什么样子
  11. PHP多功能Youngxj工具箱/在线站长工具箱源码
  12. html代码替换正则:把lt;ssgt;lt;img src=quot;aquot; data=quot;bquot;gt;lt;/ssgt;换成lt;img src=b /gt;
  13. 【软考系统架构设计师】2019年下系统架构师案例分析历年真题
  14. 苹果无需越狱(iPhone、iPad)手机多开教程
  15. 【异常处理】The CXX compiler identification is unknown
  16. java 接口自动化
  17. cesium---图加载
  18. java 用Apache Commons Email发邮件
  19. Android 实现视屏播放器、边播边缓存功能、外加铲屎(IJKPlayer)
  20. 20220714暑期实习笔记-下午

热门文章

  1. SaltStack二次开发api
  2. Jmeter并发压测
  3. 如何在结构体里面套结构体_Rust 学习笔记-13 Rust 结构体
  4. h5文字垂直居中_基于两款开源 h5 媒体编辑器定制一套海报系统
  5. java swing复选框大小_Java Swing界面编程(28)---复选框:JCheckBox
  6. 漫步者蓝牙只有一边有声音_2019年上半年最具“诚意”的真无线劲挂蓝牙耳机新品...
  7. [码海拾贝 之Perl]在字符串数组中查找特定的字符串是否存在
  8. html5实现视频播放器 弹幕效果,基于HTML5的有弹幕功能的视频播放器
  9. java语言数组实现栈的操作_基于自定义的动态数组实现一个栈(Java语言)
  10. java 输入框_Java文本框和文本区的输入输出