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


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实例教程(19) 使用HoTMetal(2)
Dec 23 Javascript
高性能web开发 如何加载JS,JS应该放在什么位置?
May 14 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
May 15 Javascript
JQuery操作元素的css样式
Mar 09 Javascript
AngularJS实现使用路由切换视图的方法
Jan 24 Javascript
用vue和node写的简易购物车实现
Apr 25 Javascript
vue页面使用阿里oss上传功能的实例(二)
Aug 09 Javascript
ES6中Array.copyWithin()函数的用法实例详解
Sep 16 Javascript
详解Vue如何支持JSX语法
Nov 10 Javascript
使用原生JS实现滚轮翻页效果的示例代码
May 31 Javascript
JavaScript 常见的继承方式汇总
Sep 17 Javascript
基于react项目打包css引用路径错误解决方案
Oct 28 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判断当前操作系统类型
2015/10/28 PHP
PHP环境搭建(php+Apache+mysql)
2016/11/14 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
最新28个很棒的jQuery 教程
2011/05/28 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
2015/06/17 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
JS实现可点击展开与关闭的左侧广告代码
2015/09/02 Javascript
微信小程序开发之Tabbar实例详解
2017/01/09 Javascript
nodejs根据ip数组在百度地图中进行定位
2017/03/06 NodeJs
Js通过AES加密后PHP用Openssl解密的方法
2019/07/12 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
2019/08/08 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
web.py中调用文件夹内模板的方法
2014/08/26 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
python使用代理ip访问网站的实例
2018/05/07 Python
python多进程控制学习小结
2018/10/31 Python
浅谈Python的list中的选取范围
2018/11/12 Python
python生成九宫格图片
2018/11/19 Python
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
python uuid生成唯一id或str的最简单案例
2021/01/13 Python
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
中学生差生评语
2014/01/30 职场文书
函授毕业自我鉴定
2014/02/04 职场文书
军训自我鉴定100字
2014/02/13 职场文书
开业庆典主持词
2014/03/21 职场文书
环保建议书100字
2014/05/14 职场文书
城管执法人员纪律作风整顿思想汇报
2014/09/13 职场文书
户籍证明模板
2014/09/28 职场文书
入党自荐书范文
2015/03/05 职场文书
2015年三万活动总结
2015/03/25 职场文书
2015年领班工作总结
2015/04/29 职场文书
2016年度基层党建工作公开承诺书
2016/03/25 职场文书
创业项目(超低成本创业项目)
2019/08/16 职场文书
OpenCV实现常见的四种图像几何变换
2022/04/01 Python