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 相关文章推荐
JS判断表单输入是否为空(示例代码)
Dec 23 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
Mar 30 Javascript
jquery实现垂直和水平菜单导航栏
Aug 27 Javascript
JS验证不重复验证码
Feb 10 Javascript
原生js实现放大镜
Feb 20 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
Mar 25 Javascript
在vue项目中使用sass的配置方法
Mar 20 Javascript
ES6 对象的新功能与解构赋值介绍
Feb 05 Javascript
详解小程序云开发数据库
May 20 Javascript
JavaScript 截取字符串代码实例
Sep 05 Javascript
jQuery实现小火箭返回顶部特效
Feb 03 jQuery
原生javascript中this几种常见用法总结
Feb 24 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 字符串操作入门教程
2006/12/06 PHP
php a simple smtp class
2007/11/26 PHP
php实现批量压缩图片文件大小的脚本
2014/07/04 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
2016/09/21 PHP
JavaScript XML实现两级级联下拉列表
2008/11/10 Javascript
在html页面上拖放移动标签
2010/01/08 Javascript
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
jquery插件ContextMenu设置右键菜单
2017/03/13 Javascript
node.js支持多用户web终端实现及安全方案
2017/11/29 Javascript
关于react中组件通信的几种方式详解
2017/12/10 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
2018/07/27 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
2019/05/10 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
2020/07/18 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
Python使用Django实现博客系统完整版
2020/09/29 Python
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
2018/10/14 Python
python 文件查找及内容匹配方法
2018/10/25 Python
python中使用 xlwt 操作excel的常见方法与问题
2019/01/13 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
通俗易懂了解Python装饰器原理
2020/09/17 Python
Django实现简单的分页功能
2021/02/22 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
万代美国官网:PREMIUM BANDAI USA
2020/09/11 全球购物
自考毕业自我鉴定
2014/03/18 职场文书
《特殊的葬礼》教学反思
2014/04/27 职场文书
台风停课通知
2015/04/24 职场文书
元旦主持词开场白
2015/05/29 职场文书
检讨书范文
2019/04/16 职场文书
linux下导入、导出mysql数据库命令的实现方法
2021/05/26 MySQL