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


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对象模型-执行模型
Apr 28 Javascript
js以对象为索引的关联数组
Jul 04 Javascript
Jquery对select的增、删、改、查操作
Feb 06 Javascript
javascript清空table表格的方法
May 14 Javascript
AngularJS基础 ng-dblclick 指令用法
Aug 01 Javascript
javascript动画之磁性吸附效果篇
Dec 09 Javascript
微信小程序 使用canvas制作K线实例详解
Jan 12 Javascript
详解webpack和webpack-simple中如何引入css文件
Jun 28 Javascript
jQuery 操作 HTML 元素和属性的方法
Nov 12 jQuery
vue给对象动态添加属性和值的实例
Sep 09 Javascript
微信小程序实现滑动翻页效果(完整代码)
Dec 06 Javascript
VueQuillEditor富文本上传图片(非base64)
Jun 03 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实现的观察者模式实例
2017/06/21 PHP
Laravel 修改默认日志文件名称和位置的例子
2019/10/17 PHP
Display SQL Server Login Mode
2007/06/21 Javascript
javascript事件模型代码
2007/07/01 Javascript
Javascript 类与静态类的实现
2010/04/01 Javascript
为你的网站增加亮点的9款jQuery插件推荐
2011/05/03 Javascript
javascript复制对象使用说明
2011/06/28 Javascript
jQuery图片播放8款精美插件分享
2013/02/17 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
jQuery中:first选择器用法实例
2014/12/30 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
基于AngularJS的拖拽文件上传的实例代码
2017/07/15 Javascript
Javascript中 toFixed四舍六入方法
2017/08/21 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
在Swiper内如何制作CSS3动画效果示例代码
2017/12/07 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
JS/jQuery实现简单的开关灯效果【案例】
2019/02/19 jQuery
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
一篇文章快速了解Python的GIL
2018/01/12 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
wxpython布局的实现方法
2019/11/01 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
2020/02/29 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
设置jupyter中DataFrame的显示限制方式
2020/04/12 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
John Varvatos官方网站:设计师男士时装
2017/02/08 全球购物
家长写给老师的建议书
2014/03/13 职场文书
农民工工资支付承诺函
2014/03/31 职场文书
2014年计生标语
2014/06/23 职场文书
大学生活动总结模板
2014/07/02 职场文书