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 相关文章推荐
IE6浏览器下resize事件被执行了多次解决方法
Dec 11 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
May 27 Javascript
Javascript写入txt和读取txt文件示例
Feb 12 Javascript
JS按回车键实现登录的方法
Aug 25 Javascript
node.js使用require()函数加载模块
Nov 26 Javascript
jQuery中[attribute^=value]选择器用法实例
Dec 31 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
Aug 26 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
Mar 11 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
Jul 24 Javascript
浅谈js中调用函数时加不加括号的问题
Jul 28 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
Aug 31 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
Oct 26 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
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
php header Content-Type类型小结
2011/07/03 PHP
定义php常量的详解
2013/06/09 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
让Firefox支持event对象实现代码
2009/11/07 Javascript
jQuery 打造动态下滑菜单实现说明
2010/04/15 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
javascript 上下banner替换具体实现
2013/11/14 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
AngularJS 最常用的功能汇总
2016/02/17 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
2016/12/28 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
2017/06/21 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
jQuery中的for循环var与let的区别
2018/04/21 jQuery
webpack开发环境和生产环境的深入理解
2018/11/08 Javascript
Vue SPA 初次进入加载动画实现代码
2019/11/14 Javascript
JS如何操作DOM基于表格动态展示数据
2020/10/15 Javascript
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
Python中的包和模块实例
2014/11/22 Python
Python实现简单截取中文字符串的方法
2015/06/15 Python
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
使用python和Django完成博客数据库的迁移方法
2018/01/05 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
python如何查看网页代码
2020/06/07 Python
Python使用xpath实现图片爬取
2020/09/16 Python
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
介绍一下Make? 为什么使用make
2013/12/08 面试题
葡萄牙语专业个人求职信
2013/12/10 职场文书
小学生暑假感言
2014/02/06 职场文书
学生打架检讨书
2014/02/14 职场文书
医德医风学习心得体会
2016/01/25 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书
使用Redis实现分布式锁的方法
2022/06/16 Redis