ECMAScript 专题
专题目录
您的位置:ECMAScript > ECMAScript 专题 > ECMAScript Boolean 运算符
ECMAScript Boolean 运算符
作者:--    发布时间:2019-11-20

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

boolean 运算符有三种:not、and 和 or。

在学习各种逻辑运算符之前,让我们先了解一下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);			//不会执行这一行
网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册