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 Flash/MP3/Video多媒体插件
Jan 18 Javascript
url 编码 js url传参中文乱码解决方案
Apr 11 Javascript
在网站上应该用的30个jQuery插件整理
Nov 03 Javascript
jquery的总体架构分析及实现示例详解
Nov 08 Javascript
jQuery实现拼图小游戏(实例讲解)
Jul 24 jQuery
JavaScript Date对象应用实例分享
Oct 30 Javascript
vue、react等单页面项目应该这样子部署到服务器
Jan 03 Javascript
angular使用md5,CryptoJS des加密的方法
Jun 03 Javascript
Vue中实现权限控制的方法示例
Jun 07 Javascript
layui实现根据table数据判断按钮显示情况的方法
Sep 26 Javascript
vue中监听路由参数的变化及方法
Dec 06 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
Apr 22 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+memcache实现的网站在线人数统计代码
2014/07/04 PHP
ThinkPHP行为扩展Behavior应用实例详解
2014/07/22 PHP
php session_decode函数用法讲解
2019/05/26 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
jquery $.ajax入门应用二
2008/11/19 Javascript
jquery 使用点滴函数代码
2011/05/20 Javascript
JS解决ie6下png透明的方法实例
2013/08/02 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
2014/02/26 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
Javascript日期格式化format函数的使用方法
2016/08/30 Javascript
关于jQuery EasyUI 中刷新Tab选项卡后一个页面变形的解决方法
2017/03/02 Javascript
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
js定时器+简单的动画效果实例
2017/11/10 Javascript
详解Vuex管理登录状态
2017/11/13 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
小程序click-scroll组件设计
2019/06/18 Javascript
js+canvas实现纸牌游戏
2020/03/16 Javascript
Python字符串拼接六种方法介绍
2017/12/18 Python
取numpy数组的某几行某几列方法
2018/04/03 Python
python中单例常用的几种实现方法总结
2018/10/13 Python
python程序变成软件的实操方法
2019/06/24 Python
python如何统计代码运行的时长
2019/07/24 Python
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
const和static readonly区别
2013/05/20 面试题
会计专业求职信范文
2014/03/16 职场文书
师范生求职信
2014/06/14 职场文书
开展批评与自我批评发言稿
2014/10/16 职场文书
2014年质量工作总结
2014/11/22 职场文书
创业计划书之密室逃脱
2019/11/08 职场文书
Java集成swagger文档组件
2021/06/28 Java/Android
Spring Boot mybatis-config 和 log4j 输出sql 日志的方式
2021/07/26 Java/Android