彻底理解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的值;
&& 优先级高于 ||;
转载于:https://www.cnblogs.com/ranyonsue/p/9318112.html
彻底理解js中的和||相关推荐
- 彻底理解js中this
相关博文:http://blog.csdn.net/libin_1/article/details/49996815 彻底理解js中this的指向,不必硬背. 首先必须要说的是,this的指向在函数定 ...
- 理解js中this的指向
彻底理解js中this的指向 JavaScript 的 this 指向问题深度解析 转载于:https://www.cnblogs.com/jeacy/p/6509616.html
- 深入理解Js中的this
深入理解Js中的this JavaScript作用域为静态作用域static scope,但是在Js中的this却是一个例外,this的指向问题就类似于动态作用域,其并不关心函数和作用域是如何声明以及 ...
- js原型和原型链_理解JS中的原型和原型链
导读:JavaScript中(JS)的原型和原型链是web前端开发面试中经常被问到的问题:同时,如果我们能很好的理解JS中的原型和原型链,对于控制台输出的很多信息我们也能更好的理解,而原型链也是实现继 ...
- 理解JS中的声明式与命令式
理解JS中的声明式与命令式? 声明式编程 :告诉机器你想要的是什么 让机器想出去做 优缺点 : 声明式减少了可变量(Immutable Variable)的声明,程序更为安全, 代码更加简洁 ...
- 理解js中的面向对象
目录 前言: 一点疑问: 1.封装 2.继承 原型链的查找机制 不容易理解的点: ----重点在最后---- 前言: js是一门面向对象的语言,但是又没有类的概念,虽然后来加入了class,但也就是个 ...
- 彻底理解js中this的指向
首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ...
- 详细理解JS中的继承
正式说继承之前,有两个相关小点: JS只支持实现继承,即继承实际的方法,不支持接口继承(即继承方法的签名,但JS中函数没签名) 所有对象都继承了Object.prototype上的属性和方法. 说继承 ...
- 理解JS中的this的指向
原文地址:https://www.cnblogs.com/pssp/p/5216085.html#1 首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到 ...
- 深入理解JS中this关键字
为什么要使用this关键字 看个例子 function indetify() {retun this.name.toUpperCase()}var obj = {name: 'zz'}indetify ...
最新文章
- .net Windows服务程序和安装程序制作图解
- Linux gsoap 访问Jira
- Linux---系统日志
- Redis在Linux上编译
- boost::stl_interfaces模块实现过滤的整数迭代器的测试程序
- 清除element残留表单校验
- System.Diagnostics.Process 执行.EXE
- 03.结构化机器学习项目 W1.机器学习策略(1)
- 杨森翔书法-明月双溪水
- 幽冥问答录:兼职阴间判官介绍阴间是什么样子
- PHP多功能Youngxj工具箱/在线站长工具箱源码
- html代码替换正则:把lt;ssgt;lt;img src=quot;aquot; data=quot;bquot;gt;lt;/ssgt;换成lt;img src=b /gt;
- 【软考系统架构设计师】2019年下系统架构师案例分析历年真题
- 苹果无需越狱(iPhone、iPad)手机多开教程
- 【异常处理】The CXX compiler identification is unknown
- java 接口自动化
- cesium---图加载
- java 用Apache Commons Email发邮件
- Android 实现视屏播放器、边播边缓存功能、外加铲屎(IJKPlayer)
- 20220714暑期实习笔记-下午
热门文章
- SaltStack二次开发api
- Jmeter并发压测
- 如何在结构体里面套结构体_Rust 学习笔记-13 Rust 结构体
- h5文字垂直居中_基于两款开源 h5 媒体编辑器定制一套海报系统
- java swing复选框大小_Java Swing界面编程(28)---复选框:JCheckBox
- 漫步者蓝牙只有一边有声音_2019年上半年最具“诚意”的真无线劲挂蓝牙耳机新品...
- [码海拾贝 之Perl]在字符串数组中查找特定的字符串是否存在
- html5实现视频播放器 弹幕效果,基于HTML5的有弹幕功能的视频播放器
- java语言数组实现栈的操作_基于自定义的动态数组实现一个栈(Java语言)
- java 输入框_Java文本框和文本区的输入输出