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


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 相关文章推荐
javascript拓展DOM操作 prependChild insertAfert
Nov 17 Javascript
Jquery公告滚动+AJAX后台得到数据
Apr 14 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
Dec 12 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
Sep 12 Javascript
js获取图片宽高的方法
Nov 25 Javascript
深入浅析react native es6语法
Dec 09 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
Oct 08 Javascript
jQuery Password Validation密码验证
Dec 30 Javascript
从零学习node.js之mysql数据库的操作(五)
Feb 24 Javascript
前端页面文件拖拽上传模块js代码示例
May 19 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
Jul 31 jQuery
解决layui 表单元素radio不显示渲染的问题
Sep 04 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
CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
2020/03/17 数码科技
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
PHP 递归效率分析
2009/11/24 PHP
如何用php获取文件名后缀
2013/06/09 PHP
ie与session丢失(新窗口cookie丢失)实测及解决方案
2013/07/15 PHP
php的SimpleXML方法读写XML接口文件实例解析
2014/06/16 PHP
2014年10个最佳的PHP图像操作库
2014/07/14 PHP
JavaScript监测ActiveX控件是否已经安装过的代码
2008/09/02 Javascript
javascript 二维数组的实现与应用
2010/03/16 Javascript
php is_numberic函数造成的SQL注入漏洞
2014/03/10 Javascript
js给selected添加options的方法
2015/05/06 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
Javascript基础学习笔记(菜鸟必看篇)
2016/07/22 Javascript
ES6记录异步函数的执行时间详解
2016/08/31 Javascript
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
2017/09/28 Javascript
js实现单张图片平移切换效果
2017/10/11 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
JavaScript文档加载模式以及元素获取
2020/07/28 Javascript
vue axios请求成功却进入catch的原因分析
2020/09/08 Javascript
jQuery实现计算器功能
2020/10/19 jQuery
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
深入了解Python数据类型之列表
2016/06/24 Python
20个常用Python运维库和模块
2018/02/12 Python
python自动12306抢票软件实现代码
2018/02/24 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
迪拜航空官方网站:flydubai
2017/04/20 全球购物
印度低票价航空公司:GoAir
2017/10/11 全球购物
Linux内核产生并发的原因
2016/11/08 面试题
机械工程师的岗位职责
2013/11/17 职场文书
铁路工务反思材料
2014/02/07 职场文书
老公保证书范文
2014/04/29 职场文书
学习雷锋精神倡议书
2015/04/27 职场文书
2016年教师节感言
2015/12/09 职场文书