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 Prototype对象
Jan 07 Javascript
asp.net+js 实现无刷新上传解析csv文件的代码
May 17 Javascript
js 自定义个性下拉选择框示例
Aug 20 Javascript
jQuery实用技巧必备(下)
Nov 03 Javascript
基于JavaScript获取鼠标位置的各种方法
Dec 16 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
Aug 25 Javascript
js实现百度搜索提示框
Feb 05 Javascript
jQuery扇形定时器插件pietimer使用方法详解
Jul 18 jQuery
JS实现登录页密码的显示和隐藏功能
Dec 06 Javascript
微信web端后退强制刷新功能的实现代码
Mar 04 Javascript
vue-cli 3.x 修改dist路径的方法
Sep 19 Javascript
Vue的列表之渲染,排序,过滤详解
Feb 24 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 session 错误
2009/05/21 PHP
PHP+ajax 无刷新删除数据
2010/02/20 PHP
PHP设计模式之解释器模式的深入解析
2013/06/13 PHP
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
php实现微信发红包功能
2018/07/13 PHP
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
2009/11/24 Javascript
jQuery1.6 类型判断实现代码
2011/09/01 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
2013/06/28 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
2017/05/01 jQuery
通过示例彻底搞懂js闭包
2017/08/10 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
JavaScript JMap类定义与使用方法示例
2019/01/22 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
2020/02/11 Javascript
js实现查询商品案例
2020/07/22 Javascript
对vue生命周期的深入理解
2020/12/03 Vue.js
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
用python 制作图片转pdf工具
2015/01/30 Python
基于Python Shell获取hostname和fqdn释疑
2016/01/25 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
Pytorch中实现只导入部分模型参数的方式
2020/01/02 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
2020/04/20 Python
英国床垫在线:Mattress Online
2016/12/07 全球购物
关于爱情的广播稿
2014/01/16 职场文书
高中数学教学反思
2014/01/30 职场文书
奥利奥广告词
2014/03/20 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
Python中with上下文管理协议的作用及用法
2022/03/18 Python
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers