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


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算法中的排序、数组去重详细概述
Oct 14 Javascript
jQuery实现单击按钮遮罩弹出对话框(仿天猫的删除对话框)
Apr 10 Javascript
jQuery中removeAttr()方法用法实例
Jan 05 Javascript
浅谈JavaScript正则表达式分组匹配
Apr 10 Javascript
详解javascript实现瀑布流绝对式布局
Jan 29 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
Dec 08 Javascript
javascript实现一个网页加载进度loading
Jan 04 Javascript
详解使用React全家桶搭建一个后台管理系统
Nov 04 Javascript
layui table 参数设置方法
Aug 14 Javascript
详解Vue内部怎样处理props选项的多种写法
Nov 06 Javascript
vue.js层叠轮播效果的实例代码
Nov 08 Javascript
js实现动态时钟
Mar 12 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
做个自己站内搜索引擎
2006/10/09 PHP
php下连接mssql2005的代码
2011/01/17 PHP
PHP中最容易忘记的一些知识点总结
2013/04/28 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
2014/05/12 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
2017/09/13 PHP
php创建类并调用的实例方法
2019/09/25 PHP
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
最好用的省市二级联动 原生js实现你值得拥有
2013/09/22 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
javascript操作referer详细解析
2014/03/10 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
javascript实现倒计时并弹窗提示特效
2015/06/05 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
详解vue-router 2.0 常用基础知识点之router.push()
2017/05/10 Javascript
Angular将填入表单的数据渲染到表格的方法
2017/09/22 Javascript
详解vue使用vue-layer-mobile组件实现toast,loading效果
2018/08/31 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
2020/07/17 Javascript
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
Python基于scrapy采集数据时使用代理服务器的方法
2015/04/16 Python
Python实现快速计算词频功能示例
2018/06/25 Python
Python修改文件往指定行插入内容的实例
2019/01/30 Python
次世代生活态度:Hypebeast
2018/07/05 全球购物
shell程序中如何注释
2012/01/28 面试题
教导处工作制度
2014/01/18 职场文书
语文教学感言
2014/02/06 职场文书
双拥工作宣传标语
2014/06/26 职场文书
服务明星事迹材料
2014/12/29 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
留学推荐信怎么写
2015/03/26 职场文书
二审代理词范文
2015/05/25 职场文书
《鲁班学艺》读后感3篇
2019/11/27 职场文书
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript