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 相关文章推荐
URI、URL和URN之间的区别与联系
Dec 20 Javascript
jQuery 学习第七课 扩展jQuery的功能 插件开发
May 17 Javascript
基于jquery的模态div层弹出效果
Aug 21 Javascript
JavaScript OOP面向对象介绍
Dec 02 Javascript
MooBox 基于Mootools的对话框插件
Jan 20 Javascript
JsRender for object语法简介
Oct 31 Javascript
jQuery Validation Plugin验证插件手动验证
Jan 26 Javascript
Vue2.0+ElementUI实现表格翻页的实例
Oct 23 Javascript
vue与原生app的对接交互的方法(混合开发)
Nov 28 Javascript
async/await让异步操作同步执行的方法详解
Nov 01 Javascript
Vue数据双向绑定底层实现原理
Nov 22 Javascript
vue使用echarts实现折线图
Mar 21 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
php实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
PHP中$_SERVER的详细参数与说明介绍
2013/10/26 PHP
PHP数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
php正则替换处理HTML页面的方法
2015/06/17 PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
2019/05/09 PHP
document.all与WEB标准
2020/05/13 Javascript
Iframe thickbox2.0使用的方法
2009/03/05 Javascript
JQuery上传插件Uploadify使用详解及错误处理
2010/04/27 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
实现高性能JavaScript之执行与加载
2016/01/30 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
2016/03/07 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
a标签置灰不可点击的实现方法
2017/02/06 Javascript
Canvas实现放射线动画效果
2017/02/15 Javascript
解析Vue 2.5的Diff算法
2017/11/28 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
通过实践编写优雅的JavaScript代码
2019/05/30 Javascript
[49:41]NB vs NAVI Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
python调用cmd命令行制作刷博器
2014/01/13 Python
Python将字符串常量转化为变量方法总结
2019/03/17 Python
python matplotlib画图库学习绘制常用的图
2019/03/19 Python
python实现弹跳小球
2019/05/13 Python
Python私有属性私有方法应用实例解析
2020/09/15 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
加热夹克:RAVEAN
2018/10/19 全球购物
美国唇部护理专家:Sara Happ
2019/06/19 全球购物
上班上网检讨书
2014/01/29 职场文书
金融管理毕业生求职信
2014/03/03 职场文书
公司总经理岗位职责
2014/03/15 职场文书
党的群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
党员批评与自我批评(5篇)
2014/09/23 职场文书
个人工作保证书
2015/02/28 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书