下载APP 编程狮,随时随地学编程
返回 首页

ECMAScript 教程

ECMAScript Boolean 运算符

Boolean 运算符得以让程序语言得以正常运行,因此它起到十分重要的作用。

Boolean 运算符有三种:NOT、AND 和 OR。

ToBoolean 操作

在学习各种逻辑运算符之前,让我们先了解一下ECMAScript-262 v5规范中描述的ToBoolean操作。

抽象操作ToBoolean将其参数按照下表中的规则转换为逻辑值:

参数类型结果
Undefinedfalse
Nullfalse
Boolean结果等于输入的参数(不转换)
Number如果参数为 +0, -0 或 NaN,则结果为 false;否则为 true。
String如果参数为空字符串,则结果为 false;否则为 true。
Objecttrue

逻辑 NOT 运算符

在ECMAScript中,逻辑NOT运算符与C和Java中的逻辑NOT运算符相同,都由感叹号(!)表示。

与逻辑OR和逻辑AND运算符不同的是,逻辑NOT运算符返回的一定是Boolean值

逻辑NOT运算符的行为如下:

  • 如果运算数是对象,返回false
  • 如果运算数是数字0,返回true
  • 如果运算数是0以外的任何数字,返回false
  • 如果运算数是null,返回true
  • 如果运算数是NaN,返回true
  • 如果运算数是undefined,发生错误

通常,该运算符用于控制循环:

var bFound = false;
var i = 0;

while (!bFound)
 {
  if (aValue[i] == vSearchValues) {
    bFound = true;
  } else {
    i++;
  }
}

在这个例子中,Boolean变量(bFound)用于记录检索是否成功。找到问题中的数据项时,bFound将被设置为true,!bFound将等于false,意味着运行将跳出while 循环。

判断ECMAScript变量的Boolean值时,也可以使用逻辑NOT运算符。这样做需要在一行代码中使用两个NOT运算符。无论运算数是什么类型,第一个NOT运算符返回Boolean值。第二个NOT将对该Boolean值求负,从而给出变量真正的Boolean值。

var bFalse = false;
var sRed = "red";
var iZero = 0;
var iThreeFourFive = 345;
var oObject = new Object;

document.write("bFalse 的逻辑值是 " + (!!bFalse));
document.write("sRed 的逻辑值是 " + (!!sRed));
document.write("iZero 的逻辑值是 " + (!!iZero));
document.write("iThreeFourFive 的逻辑值是 " + (!!iThreeFourFive));
document.write("oObject 的逻辑值是 " + (!!oObject));

结果:

bFalse 的逻辑值是 false
sRed 的逻辑值是 true
iZero 的逻辑值是 false
iThreeFourFive 的逻辑值是 true
oObject 的逻辑值是 true 

逻辑 AND 运算符

在ECMAScript中,逻辑AND运算符用双和号(&&)表示:

例如:

var bTrue = true;
var bFalse = false;
var bResult = bTrue && bFalse;

下面的真值表描述了逻辑AND运算符的行为:

运算数 1运算数 2结果
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

逻辑 AND 运算的运算数可以是任何类型的,不止是 Boolean 值。

如果某个运算数不是原始的Boolean型值,逻辑AND运算并不一定返回Boolean值:

  • 如果第一个运算数是对象,第二个是Boolean值,返回第一个对象。
  • 如果两个运算数都是对象,返回第二个对象。
  • 如果某个运算数是null,返回null。
  • 如果某个运算数是NaN,返回NaN。
  • 如果某个运算数是undefined,发生错误。

与Java中的逻辑AND运算相似,ECMAScript中的逻辑AND运算也是简便运算,即如果第一个运算数决定了结果,就不再计算第二个运算数。对于逻辑AND运算来说,如果第一个运算数是false,那么无论第二个运算数的值是什么,结果都不可能等于true。

考虑下面的例子:

var bTrue = true;
var bResult = (bTrue && bUnknown);	//发生错误
alert(bResult);			//这一行不会执行

这段代码在进行逻辑AND运算时将引发错误,因为变量bUnknown是未定义的。变量bTrue的值为true,因为逻辑AND运算将继续计算变量bUnknown。这样做就会引发错误,因为bUnknown的值是undefined,不能用于逻辑AND运算。

如果修改这个例子,把第一个数设为false,那么就不会发生错误:

var bFalse = false;
var bResult = (bFalse && bUnknown);
alert(bResult);			//输出 "false"

在这段代码中,脚本将输出逻辑AND运算返回的值,即字符串"false"。即使变量bUnknown的值为undefined,它也不会被计算,因为第一个运算数的值是false。

提示:在使用逻辑AND运算符时,必须记住它的这种简便计算特性。

逻辑 OR 运算符

ECMAScript中的逻辑OR运算符与Java中的相同,都由双竖线(||)表示:

var bTrue = true;
var bFalse = false;
var bResult = bTrue || bFalse;

下面的真值表描述了逻辑OR运算符的行为:

运算数 1运算数 2结果
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

与逻辑AND运算符相似,如果某个运算数不是Boolean值,逻辑OR运算并不一定返回Boolean值:

  • 如果一个运算数是对象,并且该对象左边的运算数值均为false,则返回该对象。
  • 如果两个运算数都是对象,返回第一个对象。
  • 如果最后一个运算数是null,并且其他运算数值均为false,则返回null。
  • 如果最后一个运算数是NaN,并且其他运算数值均为false,则返回NaN。
  • 如果某个运算数是undefined,发生错误。

与逻辑AND运算符一样,逻辑OR运算也是简便运算。对于逻辑OR运算符来说,如果第一个运算数值为true,就不再计算第二个运算数。

例如:

var bTrue = true;
var bResult = (bTrue || bUnknown);
alert(bResult);			//输出 "true"

与前面的例子相同,变量bUnknown是未定义的。不过,由于变量bTrue的值为true,bUnknown不会被计算,因此输出的是"true"。

如果把bTrue改为false,将发生错误:

var bFalse = false;
var bResult = (bFalse || bUnknown);	//发生错误
alert(bResult);			//不会执行这一行
目录

ECMAScript 基础

ECMAScript 语法
ECMAScript 变量
ECMAScript 关键字
ECMAScript 保留字
ECMAScript 原始值和引用值
ECMAScript 原始类型
ECMAScript 引用类型

ECMAScript 运算符

ECMAScript 位运算符
ECMAScript Boolean 运算符
ECMAScript 乘性运算符
ECMAScript 加性运算符
ECMAScript 关系运算符
ECMAScript 等性运算符
ECMAScript 条件运算符
ECMAScript 赋值运算符
ECMAScript 逗号运算符

ECMAScript 语句

ECMAScript if 语句
ECMAScript 迭代语句
ECMAScript 标签语句
ECMAScript break 和 continue 语句
ECMAScript with 语句
ECMAScript switch 语句

ECMAScript 函数

ECMAScript 函数概述
ECMAScript arguments 对象
ECMAScript Function 对象(类)
ECMAScript 闭包(closure)

ECMAScript 对象

ECMAScript 面向对象技术
ECMAScript 对象应用
ECMAScript 对象类型
ECMAScript 对象作用域
ECMAScript 定义类或对象
ECMAScript 修改对象

ECMAScript 继承

ECMAScript 继承机制实例
ECMAScript 继承机制实现

ECMAScript 6入门

ECMAScript 6入门 前言
ECMAScript 6简介
ECMAScript 6 let和const命令
ECMAScript 6 变量的解构赋值
ECMAScript 6 字符串的扩展
ECMAScript 6 正则的扩展
ECMAScript 6 数值的扩展
ECMAScript 6 数组的扩展
ECMAScript 6 函数的扩展
ECMAScript 6 对象的扩展
ECMAScript 6 Symbol
ECMAScript 6 Proxy和Reflect
ECMAScript 6 二进制数组
ECMAScript 6 Set和Map数据结构
ECMAScript 6 Iterator和for...of循环
ECMAScript 6 Generator 函数
ECMAScript 6 Promise对象
ECMAScript 6 异步操作和Async函数
ECMAScript 6 Class
ECMAScript 6 修饰器(Decorator)
ECMAScript 6 Module
ECMAScript 6 编程风格
读懂 ECMAScript 规格
ECMAScript 6 参考链接

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }