运算符&&的三个不同层次


Posted in Javascript onApril 07, 2013

运算符可以从三个不同的层次进行理解。

第一层理解

当操作数都是布尔值时,“&&”对两个值执行布尔与(AND)操作。

x==0 && y==0 // 只有当x和y都是0时,才返回true

关系运算符的优先级比”&&”要高。

第二层理解

”&&“可以对真值和假值进行布尔与(AND)操作。(假值有false、null、undefined、0、NaN和”“)。在JS中任何希望使用布尔值的地方,表达式和语句都会将其当做真值或假值来对待,因此实际上”&&”并不总是返回true和false。

null && true // =>null: 左操作数为假值,并将其返回,整个表达式为假
true && (5 - 3) // =>2: 左操作数为真,计算右操作数,并将其结果返回

第三层理解

当运算符要返回一个真值或假值时,根据左操作数的值会遇到两种运算情况:运算符首先计算左操作数的值,如果计算结果是假值,那么整个表达式的结果一定也是假值,此时”&&“简单的返回左操作数的值,而并不会对右操作数进行计算。如果左操作数是真值,”&&“将计算右操作数的值并将其返回作为整个表达式的计算结果。

var o = {x:1};
var p = null;
o && o.x; // =>1 o是真值,返回o.x的值
p && p.y; // =>null: p是假值,将其返回,而不去计算p.y

”&&“的行为有时称作”短路“,我们将会看到很多代码利用了这一特性进行有条件地执行代码。例如下面两行代码是完全等价的:

if(a == b) stop();
(a == b) && stop();// 与上面语句等价

知识延伸

运算符“||”和”&&”一样也具有一些复杂的行为。

用来从一组备选表达式中选出第一个真值表达式:

// 先检查a是否是真值,如果是,返回a,否则和a处理方式相同地处理b
// 如果b是真值返回b,否则返回5
var max = a || b || 5;

这种用法在函数中可以用来给参数提供默认值:

function copy(o, p) {
p = p || {}; // 如果没有向参数p传递对象,就使用新创建的对象
// ...
}

运算符优先级

同一优先级的运算符,运算次序由结合方向所决定。

简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

 

Javascript 相关文章推荐
引用外部js乱码问题分析及解决方案
Apr 12 Javascript
jquery修改属性值实例代码(设置属性值)
Jan 06 Javascript
Node.js编码规范
Jul 14 Javascript
javascript实现捕捉键盘上按下的键
May 05 Javascript
JQuery实现网页右侧随动广告特效
Jan 17 Javascript
jQuery实现右下角可缩放大小的层完整实例
Jun 20 Javascript
ReactNative 之FlatList使用及踩坑封装总结
Nov 29 Javascript
vue 动态绑定背景图片的方法
Aug 10 Javascript
了解JavaScript函数中的默认参数
May 30 Javascript
ES6中Symbol、Set和Map用法详解
Aug 20 Javascript
微信小程序 授权登录详解(附完整源码)
Aug 23 Javascript
vue 单页应用和多页应用的优劣
Oct 22 Javascript
jquery实现excel导出的方法
Apr 04 #Javascript
关于jquery input textare 事件绑定及用法学习
Apr 03 #Javascript
Jquery实现弹出层分享微博插件具备动画效果
Apr 03 #Javascript
让低版本浏览器支持input的placeholder属性(js方法)
Apr 03 #Javascript
用Jquery重写windows.alert方法实现思路
Apr 03 #Javascript
如何使用jquery动态加载js,css文件实现代码
Apr 03 #Javascript
关于js注册事件的常用方法
Apr 03 #Javascript
You might like
SONY SRF-22W(33W)的电路分析和维修案例
2021/03/02 无线电
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
网站繁简切换的JS遇到页面卡死的解决方法
2014/03/12 Javascript
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
2015/08/31 Javascript
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
多个js毫秒倒计时同时进行效果
2016/01/05 Javascript
基于jQuery仿淘宝产品图片放大镜特效
2020/10/19 Javascript
JS Canvas定时器模拟动态加载动画
2016/09/17 Javascript
原生Javascript和jQuery做轮播图简单例子
2016/10/11 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
bootstrap折叠调用collapse()后data-parent不生效的快速解决办法
2017/02/23 Javascript
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
通过jQuery学习js类型判断的技巧
2019/05/27 jQuery
Vuex的实战使用详解
2019/10/31 Javascript
微信分享invalid signature签名错误踩过的坑
2020/04/11 Javascript
three.js欧拉角和四元数的使用方法
2020/07/26 Javascript
[02:15]2015国际邀请赛选手档案IG.Ferrari 430
2015/07/30 DOTA
学习python (1)
2006/10/31 Python
Python实现对比不同字体中的同一字符的显示效果
2015/04/23 Python
Python类反射机制使用实例解析
2019/12/30 Python
浅析python表达式4+0.5值的数据类型
2020/02/26 Python
Python如何生成xml文件
2020/06/04 Python
vscode+PyQt5安装详解步骤
2020/08/12 Python
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
牵手50台湾:专为黄金岁月的单身人士而设的交友网站
2021/02/18 全球购物
JoJo Maman Bébé爱尔兰官网:英国最受欢迎的精品母婴品牌
2020/12/20 全球购物
英国马莎百货印度官网:Marks & Spencer印度
2020/10/08 全球购物
介绍Java的内部类
2012/10/27 面试题
个人授权委托书模板
2014/09/14 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
个人自荐书怎么写
2015/03/26 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
会计专业自荐信范文
2019/05/22 职场文书
2019年最新借条范本!
2019/07/08 职场文书