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 相关文章推荐
JavaScript 新手24条实用建议[TUTS+]
Jun 21 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
Oct 06 Javascript
document.forms[].submit()使用介绍
Feb 19 Javascript
node.js中的http.response.addTrailers方法使用说明
Dec 14 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
Mar 11 Javascript
javascript+html5实现绘制圆环的方法
Jul 28 Javascript
详解jQuery中基本的动画方法
Dec 14 Javascript
JS敏感词过滤代码
Dec 23 Javascript
canvas实现十二星座星空图
Feb 14 Javascript
详解VUE中v-bind的基本用法
Jul 13 Javascript
JS中的JSON对象的定义和取值实现代码
May 09 Javascript
vue中keep-alive的用法及问题描述
May 15 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
set_include_path在win和linux下的区别
2008/01/10 PHP
防止MySQL注入或HTML表单滥用的PHP程序
2009/01/21 PHP
关于session在PHP5的配置文件中的详细设置参数说明
2011/04/20 PHP
深入PHP许愿墙模块功能分析
2013/06/25 PHP
html文本框提示效果的示例代码
2014/06/28 Javascript
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
使用mini-define实现前端代码的模块化管理
2014/12/25 Javascript
javascript实现随机生成DIV背景色
2016/06/20 Javascript
AngularJS入门教程之双向绑定详解
2016/08/18 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
jQuery实现用户输入自动完成功能
2017/02/13 Javascript
Next.js项目实战踩坑指南(笔记)
2018/11/29 Javascript
如何让微信小程序页面之间的通信不再变困难
2019/06/03 Javascript
JavaScript 变量,数据类型基础实例详解【变量、字符串、数组、对象等】
2020/01/04 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
2020/03/03 Javascript
Vue用mixin合并重复代码的实现
2020/11/27 Vue.js
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
2018/04/27 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
Django Auth用户认证组件实现代码
2020/10/13 Python
全网最全python库selenium自动化使用详细教程
2021/01/12 Python
css3 iphone玻璃透明气泡完美实现
2013/03/20 HTML / CSS
Html5之svg可缩放矢量图形_动力节点Java学院整理
2017/07/17 HTML / CSS
美国保健品专家:Life Extension
2018/05/04 全球购物
Europcar意大利:汽车租赁
2019/07/07 全球购物
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
领导干部廉政承诺书
2014/03/27 职场文书
2014年德育工作总结
2014/11/20 职场文书
技能培训通讯稿
2015/07/18 职场文书
调研报告的主要写法
2019/04/18 职场文书
mysql部分操作
2021/04/05 MySQL
利用Redis实现点赞功能的示例代码
2022/06/28 Redis