JavaScript 布尔操作符解析  && || !


Posted in Javascript onAugust 10, 2012

1、逻辑非

逻辑非用!表示,可以应用与ECMAScript的任何类型的值,逻辑非操作返回的是一个布尔值(true/false)。该操作符首先会将它的操作数转换为一个布尔值,然后再对其求反。

下面说明下Boolean()转型函数的一组规则。

数据类型 转换为true的值 转换为false的值
Boolean true false
String 任何非空字符串 ""(空字符串)
Number  任何非零数字值(包括无穷大) 0和NaN
Object 任何对象 null
Undefined  无 undefined

Boolean()转型函数的简便表示方法。-----------!!

2、逻辑与

逻辑与操作符由两个和号(&&)表示,有两个操作数。

逻辑与操作可以应用于任何类型的操作数,而不仅仅是布尔值。在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值;此时,它遵循一下规则:

1. 如果第一个操作数是对象,则返回第二个操作数;
2. 如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象;
3. 如果两个操作符都是对象,则返回第二个操作数; 遵循第一规则。
4. 如果有一个操作是null,则返回null;
5. 如果有一个操作符是NaN,则返回NaN;
6. 如果有一个操作符是undefined,则返回undefined。

逻辑与操作属于短路操作,即如果第一操作数能够决定结果,那么就不会再对第二个操作数求值。(可以理解为内部的两个return操作)。因此当4、5、6规则冲突时,遵循短路操作原则。

var nul = null; 
var na = NaN; 
var test; 
test = na&&nul; 
document.write(test); //NaN
var nul = null; 
var na = NaN; 
var test; 
test = nul&&na; 
document.write(test); //null

因此,我们来总结一下。&&操作主要遵循几大原则:

1.短路操作原则;
2.求值过程中会被转型生成副本,但是返回值是原来值;

// 伪代码 
function &&(param1,param2){ 
bparam1 = Boolean(param1); 
if (!bparam1) return param1; 
bparam2 = Boolean(param2); 
return param2; 
} 
// 参数是一个对象时返回引用的指针值,函数同

3、逻辑或

逻辑或符号由两个竖线符号(||)表示。
逻辑或符号同样是短路操作符。其实现过程可以参照逻辑与的伪代码。这里就不再列出一些规则了。
逻辑或常常用来做参数的缺省处理,比如 evt = evt || window.event;

Javascript 相关文章推荐
jquery自定义属性(类型/属性值)
May 21 Javascript
jQuery阻止事件冒泡具体实现
Oct 11 Javascript
JavaScript函数的4种调用方法详解
Apr 22 Javascript
Bootstrap和Angularjs配合自制弹框的实例代码
Aug 24 Javascript
js实现图片放大展示效果
Aug 30 Javascript
ES6 系列之 Generator 的自动执行的方法示例
Oct 19 Javascript
vue实现微信二次分享以及自定义分享的示例
Mar 20 Javascript
如何解决js函数防抖、节流出现的问题
Jun 17 Javascript
简单了解Javscript中兄弟ifream的方法调用
Jun 17 Javascript
vue实现评论列表功能
Oct 25 Javascript
JavaScript中的相等操作符使用详解
Dec 21 Javascript
Vue实现input宽度随文字长度自适应操作
Jul 29 Javascript
JS多物体 任意值 链式 缓冲运动
Aug 10 #Javascript
JavaScript之引用类型介绍
Aug 10 #Javascript
jquery下checked取值问题的解决方法
Aug 09 #Javascript
js分解url参数(面向对象-极简主义法应用)
Aug 09 #Javascript
深入理解javascript学习笔记(一) 编写高质量代码
Aug 09 #Javascript
JS数学函数Exp使用说明
Aug 09 #Javascript
基于jQuery实现左右div自适应高度完全相同的代码
Aug 09 #Javascript
You might like
收音机鉴频器对声音的影响和频偏分析
2021/03/02 无线电
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
php 三大特点:封装,继承,多态
2017/02/19 PHP
php微信开发之关注事件
2018/06/14 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题分析
2007/08/12 Javascript
javascript 写类方式之五
2009/07/05 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
2015/03/20 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
2015/04/05 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
2016/05/27 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
jQuery dateRangePicker插件使用方法详解
2017/07/28 jQuery
基于 Vue 的树形选择组件的示例代码
2017/08/18 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
2019/11/13 Javascript
Vue+Element自定义纵向表格表头教程
2020/10/26 Javascript
[01:20]DOTA2 2017国际邀请赛冠军之路无止竞
2017/06/19 DOTA
从零学Python之入门(三)序列
2014/05/25 Python
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
python基于socket实现网络广播的方法
2015/04/29 Python
举例讲解Python中的list列表数据结构用法
2016/03/12 Python
Python 实现 贪吃蛇大作战 代码分享
2016/09/07 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
python中seaborn包常用图形使用详解
2019/11/25 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
HTML5计时器小例子
2013/10/15 HTML / CSS
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
模具设计与制造专业应届生求职信
2013/10/18 职场文书
业务主管岗位职责范本
2013/12/25 职场文书
党建工作经验交流材料
2014/05/25 职场文书
人力资源管理专业求职信
2014/07/23 职场文书
六一儿童节开幕词
2015/01/29 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫