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 插件 将this下的div轮番显示
Apr 09 Javascript
javascript 拖放效果实现代码
Jan 22 Javascript
jQuery在html有效在jsp无效的原因及解决方法
Aug 02 Javascript
js控制页面控件隐藏显示的两种方法介绍
Oct 09 Javascript
js实现select跳转功能代码
Oct 22 Javascript
JavaScript插件化开发教程 (二)
Jan 27 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
May 12 Javascript
详解微信小程序开发—你期待的分享功能来了,微信小程序序新增5大功能
Dec 23 Javascript
js实现手机拍照上传功能
Jan 17 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
Apr 21 Javascript
vuex的module模块用法示例
Nov 12 Javascript
简单两步使用node发送qq邮件的方法
Mar 01 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
强烈推荐:php.ini中文版(2)
2006/10/09 PHP
php 301转向实现代码
2008/09/18 PHP
PHP开发者常犯的10个MySQL错误更正剖析
2012/01/30 PHP
php中一个有意思的日期逻辑处理
2012/03/25 PHP
PHP基础之运算符的使用方法
2013/04/28 PHP
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
2015/08/27 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
Bootstrap Paginator+PageHelper实现分页效果
2018/12/29 Javascript
轻松学习JavaScript函数中的 Rest 参数
2019/05/30 Javascript
解决Vue项目中tff报错的问题
2020/10/21 Javascript
Python实现子类调用父类的方法
2014/11/10 Python
基于Django模板中的数字自增(详解)
2017/09/05 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
python读取Excel表格文件的方法
2019/09/02 Python
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
韩都衣舍天猫官方旗舰店:天猫女装销售总冠军
2017/10/10 全球购物
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
Napapijri西班牙在线商店:夹克、外套、运动衫等
2020/11/05 全球购物
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
总经理驾驶员岗位职责
2013/12/04 职场文书
出国签证在职证明
2014/01/16 职场文书
前处理班长职位说明书
2014/03/01 职场文书
文化宣传方案
2014/03/13 职场文书
煤矿开采专业求职信
2014/07/08 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
酒店前台岗位职责
2015/04/16 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
联谊会开场白
2015/06/01 职场文书
教师继续教育反思周记
2015/06/25 职场文书
2016年猴年新春致辞
2015/08/01 职场文书
高一数学教学反思
2016/02/18 职场文书
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏
Linux中各个目录的作用与内容
2022/06/28 Servers