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结合css实现网页换肤功能
Nov 02 Javascript
通过jquery的$.getJSON做一个跨域ajax请求试验
May 03 Javascript
Checbox的操作含已选、未选及判断代码
Nov 07 Javascript
js 立即调用的函数表达式如何写
Jan 12 Javascript
浅谈javascript对象模型和function对象
Dec 26 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
Aug 07 Javascript
简单实现JS上传图片预览功能
Apr 14 Javascript
JavaScript变速动画函数封装添加任意多个属性
Apr 03 Javascript
vue3.0 搭建项目总结(详细步骤)
May 20 Javascript
jQuery层叠选择器用法实例分析
Jun 28 jQuery
JS/jQuery实现超简单的Table表格添加,删除行功能示例
Jul 31 jQuery
利用js实现简单开关灯代码
Nov 23 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
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
php环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
2006/11/17 PHP
php遍历目录viewDir函数
2009/12/15 PHP
PHP similar_text 字符串的相似性比较函数
2010/05/26 PHP
php_pdo 预处理语句详解
2016/11/21 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
2020/03/23 PHP
javascript 写类方式之十
2009/07/05 Javascript
Google 静态地图API实现代码
2010/11/19 Javascript
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
Javascript面向对象编程
2012/03/18 Javascript
js返回上一页并刷新代码整理
2012/12/21 Javascript
JavaScript控制Session操作方法
2013/01/17 Javascript
js判断字符是否是汉字的两种方法小结
2014/01/03 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
JavaScript比较两个对象是否相等的方法
2015/02/06 Javascript
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
15个常用的jquery代码片段
2015/12/19 Javascript
Vue组件tree实现树形菜单
2017/04/13 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
详解Django中六个常用的自定义装饰器
2018/07/04 Python
DES加密解密算法之python实现版(图文并茂)
2018/12/06 Python
python datetime时间格式的相互转换问题
2020/06/11 Python
幼教简历自我评价
2014/01/28 职场文书
趣味运动会策划方案
2014/06/02 职场文书
小学综合实践活动总结
2014/07/07 职场文书
2014年党课学习心得体会
2014/07/08 职场文书
民间借贷协议书范本
2014/10/01 职场文书
六年级学生评语大全
2014/12/26 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
小学作文之描写天气
2019/08/15 职场文书
redis 限制内存使用大小的实现
2021/05/08 Redis
Nginx配置之禁止指定IP访问
2022/05/02 Servers