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


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数据表格插件
Jul 17 Javascript
javascript操作数组详解
Dec 17 Javascript
jQuery中detach()方法用法实例
Dec 25 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
Mar 31 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
Jul 10 Javascript
jquery实现焦点轮播效果
Feb 23 Javascript
webpack-dev-server自动更新页面方法
Feb 22 Javascript
详解AngularJS 过滤器的使用
Jun 02 Javascript
jquery使用FormData实现异步上传文件
Oct 25 jQuery
jQuery操作元素的内容和样式完整实例分析
Jan 10 jQuery
Vue自定义render统一项目组弹框功能
Jun 07 Javascript
vue 使用vant插件做tabs切换和无限加载功能的实现
Nov 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
php自动加载的两种实现方法
2010/06/21 PHP
使用PHP Socket 编程模拟Http post和get请求
2014/11/25 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
IE8 兼容性问题(属性名区分大小写)
2009/06/04 Javascript
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
能说明你的Javascript技术很烂的五个原因分析
2011/10/28 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
2013/08/27 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
jQuery实现鼠标可拖动调整表格列宽度
2014/05/26 Javascript
了不起的node.js读书笔记之node.js中的特性
2014/12/22 Javascript
jQuery超简单选项卡完整实例
2015/09/26 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
babel基本使用详解
2017/02/17 Javascript
javascript连接mysql与php通过odbc连接任意数据库的实例
2017/12/27 Javascript
小程序中canvas的drawImage方法参数使用详解
2019/07/04 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
教大家使用Python SqlAlchemy
2016/02/12 Python
详解python如何调用C/C++底层库与互相传值
2016/08/10 Python
Python爬取APP下载链接的实现方法
2016/09/30 Python
浅谈Python实现Apriori算法介绍
2017/12/20 Python
python爬虫之线程池和进程池功能与用法详解
2018/08/02 Python
python实现汽车管理系统
2018/11/30 Python
在keras里面实现计算f1-score的代码
2020/06/15 Python
Python 用__new__方法实现单例的操作
2020/12/11 Python
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
DJI全球:DJI Global
2021/03/15 全球购物
学生自我鉴定范文
2013/10/04 职场文书
会计自我鉴定
2013/11/02 职场文书
公司年底活动方案
2014/08/17 职场文书
2019年警察入党转正申请书最新范文
2019/09/03 职场文书