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


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 相关文章推荐
动态改变textbox的宽高的js
Oct 26 Javascript
jQuery 连续列表实现代码
Dec 21 Javascript
Jquery ThickBox插件使用心得(不建议使用)
Sep 08 Javascript
IE下JS读取xml文件示例代码
Aug 05 Javascript
jquery SweetAlert插件实现响应式提示框
Aug 18 Javascript
jQuery打字效果实现方法(附demo源码下载)
Dec 18 Javascript
AngularJS入门教程之表格实例详解
Jul 27 Javascript
微信小程序实战之自定义toast(6)
Apr 18 Javascript
uploader秒传图片到服务器完整代码
Apr 22 Javascript
原生JS 购物车及购物页面的cookie使用方法
Aug 21 Javascript
Vue的轮播图组件实现方法
Mar 03 Javascript
echarts大屏字体自适应的方法步骤
Jul 12 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下几个常用的去空、分组、调试数组函数
2009/02/22 PHP
PHP中4个加速、缓存扩展的区别和选用建议
2014/03/12 PHP
详谈PHP文件目录基础操作
2014/11/11 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
Nginx实现反向代理
2017/09/20 Servers
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
vue注册组件的几种方式总结
2018/03/08 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
vue2.0+ 从插件开发到npm发布的示例代码
2018/04/28 Javascript
深入浅析Vue.js计算属性和侦听器
2018/05/05 Javascript
详解Axios 如何取消已发送的请求
2018/10/20 Javascript
在微信小程序中使用图表的方法示例
2019/04/25 Javascript
JS代码触发事件代码实例
2020/01/02 Javascript
JavaScript 实现下雪特效的示例代码
2020/09/09 Javascript
[49:12]完美世界DOTA2联赛PWL S2 Magma vs GXR 第二场 11.29
2020/12/02 DOTA
Python中实现远程调用(RPC、RMI)简单例子
2014/04/28 Python
Python常见工厂函数用法示例
2018/03/21 Python
python实现简单登陆系统
2018/10/18 Python
Python使用post及get方式提交数据的实例
2019/01/24 Python
python运用pygame库实现双人弹球小游戏
2019/11/25 Python
Python文件操作函数用法实例详解
2019/12/24 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
Python 打印自己设计的字体的实例讲解
2021/01/04 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
S’well Bottle保温杯官网:绝缘不锈钢水瓶
2018/05/09 全球购物
英国著名书店:Foyles
2018/12/01 全球购物
大学生毕业求职找工作的自我评价
2013/09/29 职场文书
优秀班主任事迹材料
2014/12/16 职场文书
入党积极分子个人总结
2015/03/02 职场文书
2016年会领导致辞稿
2015/07/29 职场文书
python神经网络编程之手写数字识别
2021/05/08 Python