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


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中美元符号命名冲突问题
Jan 08 Javascript
Juery解决tablesorter中文排序和字符范围的方法
May 06 Javascript
浅谈window对象的scrollBy()方法
Jul 15 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
Jan 26 Javascript
Bootstrap组件(一)之菜单
May 11 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
Jan 05 Javascript
node.js学习之断言assert的使用示例
Sep 28 Javascript
Node.js 使用jade模板引擎的示例
May 11 Javascript
vue树形结构获取键值的方法示例
Jun 21 Javascript
js实现点击按钮随机生成背景颜色
Sep 05 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
Nov 11 Javascript
JavaScript canvas实现雨滴特效
Jan 10 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
社区(php&&mysql)六
2006/10/09 PHP
php中json_decode()和json_encode()的使用方法
2012/06/04 PHP
使用PHP获取当前url路径的函数以及服务器变量
2013/06/29 PHP
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
使用PHP编写发红包程序
2015/07/22 PHP
微信自定义分享php代码分析
2016/11/24 PHP
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
JS烟花背景效果实现方法
2015/03/03 Javascript
详解JavaScript中setSeconds()方法的使用
2015/06/11 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
2015/07/05 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
2015/10/23 Javascript
js编写贪吃蛇的小游戏
2020/08/24 Javascript
Javascript vue.js表格分页,ajax异步加载数据
2016/10/24 Javascript
JavaScript构建自己的对象示例
2016/11/29 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
JavaScript事件处理程序详解
2017/09/19 Javascript
NodeJs操作MongoDB教程之分页功能以及常见问题
2019/04/09 NodeJs
基于vue-cli3创建libs库的实现方法
2019/12/04 Javascript
python调用tcpdump抓包过滤的方法
2018/07/18 Python
Python设计模式之组合模式原理与用法实例分析
2019/01/11 Python
python实现kmp算法的实例代码
2019/04/03 Python
shell程序中如何注释
2012/01/28 面试题
物流管理专业大学生自荐信
2013/10/04 职场文书
中英文求职信范文
2014/01/27 职场文书
2014全国两会大学生学习心得体会
2014/03/10 职场文书
保险公司早会主持词
2014/03/22 职场文书
联谊会主持词
2014/03/26 职场文书
安全标语口号
2014/06/09 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
个人委托函范文
2015/01/29 职场文书
房产电话营销开场白
2015/05/29 职场文书
施工安全协议书
2016/03/22 职场文书
解决Pytorch中关于model.eval的问题
2021/05/22 Python
在 SQL 语句中处理 NULL 值的方法
2021/06/07 SQL Server