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获得地址栏参数的两种方法
Nov 08 Javascript
js DOM的学习笔记
Dec 22 Javascript
P3P Header解决Cookie跨域的问题
Mar 12 Javascript
类似php的js数组的in_array函数自定义方法
Dec 27 Javascript
IE与FireFox的JavaScript兼容问题解决办法
Dec 31 Javascript
JavaScript通过select动态更换图片的方法
Mar 23 Javascript
jQuery旋转木马式幻灯片轮播特效
Dec 04 Javascript
通过JS获取Request.QueryString()参数的值实现方法
Sep 27 Javascript
Angular表单验证实例详解
Oct 20 Javascript
解决vue项目报错webpackJsonp is not defined问题
Mar 14 Javascript
微信上传视频文件提示(推荐)
Nov 22 Javascript
Node 搭建一个静态资源服务器的实现
May 20 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将csv文件导入到mysql数据库的方法
2014/12/24 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
2016/03/17 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
2018/09/16 PHP
javascript 日期常用的方法
2009/11/11 Javascript
IE和Firefox下event事件杂谈
2009/12/18 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
2013/07/11 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
2015/03/02 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
.NET微信公众号开发之创建自定义菜单
2015/07/16 Javascript
微信企业号开发之微信考勤Cookies的使用
2015/09/11 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
详解js前端代码异常监控
2017/01/11 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
Bootstrap3 模态框使用实例
2017/02/22 Javascript
JavaScript变量提升和严格模式实例分析
2019/01/27 Javascript
vue使用Font Awesome的方法步骤
2019/02/26 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
在layui下对元素进行事件绑定的实例
2019/09/06 Javascript
Vue基础配置讲解
2019/11/29 Javascript
windows 10下安装搭建django1.10.3和Apache2.4的方法
2017/04/05 Python
Python爬虫实战:分析《战狼2》豆瓣影评
2018/03/26 Python
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
解决python 上传图片限制格式问题
2019/10/30 Python
Python实现一个论文下载器的过程
2021/01/18 Python
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
查找廉价航班和发现新目的地:Kiwi.com
2019/02/25 全球购物
数据库方面面试题
2012/04/22 面试题
软件测试面试题
2015/10/21 面试题
优秀班干部事迹材料
2014/01/26 职场文书
七一党建活动方案
2014/01/28 职场文书
见习期自我鉴定范文
2014/03/19 职场文书
毕业典礼主持词大全
2014/03/26 职场文书
应届毕业生自荐信
2014/05/28 职场文书
十岁生日答谢词
2015/01/05 职场文书