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


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 相关文章推荐
jquery 图片预加载 自动等比例缩放插件
Dec 25 Javascript
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
Aug 28 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
Oct 20 Javascript
有效提高JavaScript执行效率的几点知识
Jan 31 Javascript
React 子组件向父组件传值的方法
Jul 24 Javascript
浅析JS中回调函数及用法
Jul 25 Javascript
vue router 通过路由来实现切换头部标题功能
Apr 24 Javascript
ios中视频的最后一桢问题解决
May 14 Javascript
layui表格内容溢出的解决方法
Sep 06 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
Sep 25 Javascript
Vue绑定用户接口实现代码示例
Nov 04 Javascript
jQuery实现tab栏切换效果
Dec 22 jQuery
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
转PHP手册及PHP编程标准
2006/12/17 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
PHP会话操作之cookie用法分析
2016/09/28 PHP
laravel框架关于搜索功能的实现
2018/03/15 PHP
解决PhpStorm64不能启动的问题
2020/06/20 PHP
jQuery 各种浏览器下获得日期区别
2008/12/22 Javascript
jquery1.4 教程二 ajax方法的改进
2010/02/25 Javascript
jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
2010/05/31 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
JS实现一个按钮的方法
2015/02/05 Javascript
JavaScript实现身份证验证代码
2016/02/17 Javascript
不同js异步函数同步的实现方法
2016/05/28 Javascript
实例解析angularjs的filter过滤器
2016/12/14 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
[32:36]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第二场 12.12
2020/12/16 DOTA
批量将ppt转换为pdf的Python代码 只要27行!
2018/02/26 Python
Python  Django 母版和继承解析
2019/08/09 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
python通过函数名调用函数的几种场景
2020/09/23 Python
用 python 进行微信好友信息分析
2020/11/28 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
2021/01/08 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
html2canvas生成清晰的图片实现打印的示例代码
2019/09/30 HTML / CSS
ALLSAINTS英国官网:伦敦新锐潮流品牌
2016/09/19 全球购物
美国宠物用品网站:Value Pet Supplies
2018/03/17 全球购物
Footshop法国:购买运动鞋
2020/01/19 全球购物
作为网站管理者应当如何防范XSS
2014/08/16 面试题
运动会班级口号
2014/06/09 职场文书
2015元旦主持词开场白和结束语
2014/12/14 职场文书
关于html选择框创建占位符的问题
2021/06/09 HTML / CSS
python识别围棋定位棋盘位置
2021/07/26 Python