文档章节

javascript 布尔操作符

fp94
 fp94
发布于 2015/02/05 22:33
字数 687
阅读 10
收藏 0

逻辑非

    逻辑非由一个叹号(!)表示,可以应用于 ECMAScript 中的任何值。无论是什么数据类型,这个操作符都会返回一个布尔值。逻辑非操作符首先会将它的操作数转换为一个布尔值,然后再对其求反。也就是说,逻辑非操作符遵循以下列规则:

    一个对象,返回 false;

    一个空字符串,返回 true;

    一个非空字符串,返回 false;

    数值 0 ,返回 true;

    任意非 0 数值(包括 Infinity),返回 false;

    null ,返回 true;

    NaN,返回 true;

    undefined,返回 true;

注:逻辑非操作符会先将操作数转为布尔值,所以也会有这种用法

    alert(!!0);    //false

    这样会对 0 执行一次布尔值转换和两次   非操作;


逻辑与

    逻辑与操作符由两个和号(&&)表示,他的操作数有两个,会遵循下列规则:

    第一操作数是对象,则返回第二个操作数;

    第二操作数是对象,则只有在 第一个操作数的求值结果为 true 的情况下才会返回该对象;

    两个操作数都是对象,则返回第二个操作数;

    有一个操作数是 null ,则返回 null;

    有一个操作数是 NaN,则返回 NaN;

    有一个操作数是 undefined,则返回 undefined;

注:逻辑与操作属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。也就是说,当第一个操作数是 false ,则无论第二个操作数是什么值,结果都不再可能是 true 了。(当第二个操作数未定义是,本来是会被导致程序出错的,但当第一个操作数为 false 时,就会直接返回 false 而不报错)。


逻辑或

    逻辑或操作符由两个竖线符号(||)表示,有两个操作数,遵循的规则如下:

    第一个操作数是对象,则返回第一个操作数;

    第一个操作数的求值结果为 false,则返回第二个操作数;

    两个操作数都是对象,刚返回第一个操作数;

    两个操作数都是 null & NaN & undefined,则返回 null & NaN & undefined;

注:逻辑或操作也是短路操作符。也就是说,如果第一个操作数的求值结果为 true,就不会对第二个操作数求值了。

很多时候大家都用三元运算符来定义默认值,其实用逻辑也是一样的;

例:

    var val = val?val:1;

    var val = val || 1;

以上两个定义默认值的方法都可以实现定义默认值的作用。



© 著作权归作者所有

下一篇: DOM 和 BOM
fp94
粉丝 0
博文 9
码字总数 3666
作品 0
南川
程序员
私信 提问
玩转 JavaScript 之数据类型

概述 众所周知,JavaScript 是一门弱类型语言,不对变量进行类型强制,变量可以随时持有任何类型的值,所以在 JavaScript 中,类型对于我们开发人员来说可以理解为值的内部特征,类型定义了值...

Seymoe
01/04
0
0
javascript:基本数据结构

JavaScript提供脚本语言的编程与C++非常相似,它只是去掉了C语言中有关指针等容易产生的错误,并提供了功能强大的类库.对于已经具备C++或C语言的人来说,学习JavaScript脚本语言是一件非常轻松愉...

街边
2014/01/09
0
0
简单说 正则表达式——要注意lastIndex属性

说明 这篇文章,主要和大家聊聊JavaScript中RegExp对象的属性。 解释 每个RegExp对象都包含5个属性,source、global、ignoreCase、multiline、lastIndex。 source:是一个只读的字符串,包含...

FEWY
2017/07/10
0
0
javascript之基本概念

语法 1.1 匹配大小写 javascript中的一切——变量,函数名和操作符——都是区分大小写的。 1.2 标识符 标识符就是指变量,函数,属性的名字,或者函数的参数。命名规则与java一样。 1.3 语句...

柳哥
2015/04/05
0
0
JS布尔值、逻辑运算符、操作符

以下都会使用实例来说明转换规则 value ? true : false方式转换为布尔值 Boolean(value) 方式转换为布尔值 (Invoked as a function, not as a constructor) !!value方式转换为布尔值 typeof...

秋风醉了
2014/07/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

texlive安装

Installing to: D:/bin/texlive/texlive/2019Installing [001/307, time/total: ??:??/??:??]: adobemapping [2130k]Installing [002/307, time/total: 00:03/08:57]: ae [84k]Installing......

MtrS
39分钟前
2
0
运维规范

命名规范 发布流程 监控告警 故障定位 状态 日志 监控

以谁为师
今天
2
0
约瑟夫环(报数游戏)java实现

开端 公司组织考试,一拿到考题,就是算法里说的约瑟夫环,仔细想想 以前老师将的都忘了,还是自己琢磨把~ package basic.gzy;import java.util.Iterator;import java.util.LinkedList;...

无极之岚
今天
3
0
Kernel字符设备驱动框架

Linux设备分为三大类:字符设备,块设备和网络设备,这三种设备基于不同的设备框架。相较于块设备和网络设备,字符设备在kernel中是最简单的,也是唯一没有基于设备基础框架(device结构)的...

yepanl
今天
3
0
Jenkins 中文本地化的重大进展

本文首发于:Jenkins 中文社区 我从2017年开始,参与 Jenkins 社区贡献。作为一名新成员,翻译可能是帮助社区项目最简单的方法。 本地化的优化通常是较小的改动,你无需了解项目完整的上下文...

Jenkins中文社区
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部