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 相关文章推荐
JS的反射问题
Apr 07 Javascript
基于jquery1.4.2的仿flash超炫焦点图播放效果
Apr 20 Javascript
iphone safari不支持position fixed的解决方法
May 04 Javascript
display和visibility的区别示例介绍
Feb 26 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
Oct 09 Javascript
以JavaScript来实现WordPress中的二级导航菜单的方法
Dec 14 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
Apr 21 Javascript
Vue.js一个文件对应一个组件实践
Oct 27 Javascript
angularjs+bootstrap实现自定义分页的实例代码
Jun 19 Javascript
JS 实现banner图片轮播效果(鼠标事件)
Aug 04 Javascript
webpack 3.X学习之多页面打包的方法
Sep 04 Javascript
vue实现拖拽进度条
Mar 01 Vue.js
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/03 新手入门
发布一个用PHP fsockopen写的HTTP下载的类
2007/02/22 PHP
让的PHP代码飞起来的40条小技巧(提升php效率)
2010/04/12 PHP
解析php利用正则表达式解决采集内容排版的问题
2013/06/20 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
JS+XML 省份和城市之间的联动实现代码
2009/10/14 Javascript
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
2010/06/19 Javascript
推荐11款jQuery开发的复选框和单选框美化插件
2011/08/02 Javascript
node.js中的fs.link方法使用说明
2014/12/15 Javascript
javascript中使用正则表达式清理table样式的代码
2020/04/01 Javascript
SpringMVC返回json数据的三种方式
2015/12/10 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
2017/01/11 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
微信小程序上传图片功能(附后端代码)
2020/06/19 Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
2019/06/12 Javascript
layui+jquery支持IE8的表格分页方法
2019/09/28 jQuery
vue实现点击追加选中样式效果
2019/11/01 Javascript
[46:00]Ti4 冒泡赛第二轮LGD vs C9 2
2014/07/14 DOTA
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
python中list常用操作实例详解
2015/06/03 Python
Python 调用Java实例详解
2017/06/02 Python
Python基于列表list实现的CRUD操作功能示例
2018/01/05 Python
django 捕获异常和日志系统过程详解
2019/07/18 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
轻松掌握CSS3中的字体大小单位rem的使用方法
2016/05/24 HTML / CSS
浅析border-radius如何兼容IE
2016/04/19 HTML / CSS
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
远程网络教育毕业生自我鉴定
2014/04/14 职场文书
初中学生评语大全
2014/04/24 职场文书
南京市纪委监察局整改方案
2014/09/16 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
pandas进行数据输入和输出的方法详解
2022/03/23 Python
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技