JavaScript程序设计:基础·PHP·XML
上QQ阅读APP看书,第一时间看更新

2.4.2 关系操作符

有时发现一个问题的答案不像提出正确问题那样重要。如果要编写从一个长的名单中查找匹配Marguerita Gonzalez的程序,你会检查列表中的每个名字并且询问true/false问题:“这个名字与Marguerita Gonzalez相同吗?”这个程序能够运行,但是极其没有效率和耗时。然而,如果从列表中间挑选一个名字,并且询问“通过比较两个名字中每个字符的ASCII码表示,Marguerita Gonzalez是否比这个名字大?”那么对这个问题的回答将立刻减少查找工作的一半。如果这个问题的答案是true,那么可以除去名单中的前半部分;如果这个问题的答案是false,那么可以除去名单中的后半部分。要询问这种类型的问题,可以使用关系操作符。

有6个关系操作符,如表2-3所列。有的操作符是清楚的、简单的,而有的操作符要么比较特殊,要么使用不熟悉的记号。你很可能从数学课中了解了大于符号(>)和小于符号(<),但是其他符号有必要讨论一下。

表2-3 关系操作符

键盘上没有单一符号表示小于或等于大于或等于的概念。这些概念通过组合以下符号表示:<=表示小于或等于,而>=表示大于或等于

类似地,没有单一符号表示不等于的概念,它也使用了两个符号。在JavaScript中,符号组合!=表示不等于操作符。

最后,需要特别注意等号。在程序设计中,以下两件事情是有区别的:一是把一个东西设置为与另一个东西的值相同,二是询问这样一个问题“这个东西是否与另一个东西有相同的值?”当将一个值赋给一个变量时使用等号(=),此时等号用做赋值操作符;而当比较两个东西的值时,意指“左边东西的值与右边东西的值是否相同?”此时称为比较操作符。在JavaScript中,符号==(两个等号)用于比较一个变量的值和另一个变量、值或表达式。

当在语句中使用数学操作符时,其结果是一个新值。例如,3+5等于8和JavaScript语句myNum=3+5,将把值8放入变量myNum中。而关系操作符有所不同,关系操作符意指询问一个问题而且其唯一可能的答案是yes或no(即计算机术语true或false)。例2.14说明关系操作符的使用。

例2.14 使用关系操作符

a)5<3的值为false,因为5不小于3。

b)7>6的值为true,因为7大于6。

c)9>=9的值为true,因为>=询问问题“左边的东西是否大于或等于右边的东西?”而9等于9,不大于9。

d)18!=6的值为true,因为18与6不同。

e)18!=18的值为false,因为18与18相同,因此语句“18与18不同”是错误的陈述。

f)12==12的值为true,因为12与12相同。

g)12==45的值为false,因为12与45不同。

关系操作符可以和其他操作符结合起来产生更复杂的条件和问题。例2.15示范如何使用变量混合关系和数学操作符表示值的例子。

例2.15 和变量一起使用关系操作符 对于这个例子,其中的变量有下列值:

a)W<(X+Y)的值为true,因为2小于(6+3)。

b)(Y*W)>X的值为false,因为(3*2)是6,而6不大于6。

c)(Y+Z)>=(W-Z)的值为true,因为(3+0)大于(2-0)。

d)X!=(W*Y)的值为false,因为6与(2*3)相同,所以说这两个东西不相同是错误的。

e)(Z/X)!=Y的值为true,因为(0/6)与3不同。

f)(X-(W*Y))==Z的值为true,因为(6-(2*3))与0相同。

g)X==(X*Z)的值为false,因为6与(6*0)不同。

例2.16展示的程序说明赋值操作符和比较操作符之间的不同。

例2.16 比较操作,不是赋值

执行时,显示以下信息:

例2.17 使用关系操作符处理字符 对于这个例子,其中的变量有下列值:

a)R≤highA的值为false,因为大写字母R的ASCII码是82,大写字母A的ASCII码是65,而82不小于65。

b)lowa>highA的值为true,因为小写字母a的ASCII码是97,大写字母A的ASCII码是65,而97大于65。

c)x>=star的值为true,因为小写字母x的ASCII码是120,星号(*)的ASCII码是42,而120大于42。

d)highA!=lowa的值为true,因为大写字母A(65)的ASCII码值与小写字母a(97)不相同。

e)R!=R的值为false,因为大写字母R的ASCII码值是82,所以82与82不同是错误的。

例2.18说明如何使用关系操作符处理字符串。

例2.18 使用关系操作符处理字符串 对于这个例子,其中的变量有下列值:

a)car<food的值为false,因为car的第一个字母是小写字母s,其ASCII码是115,而food的第一个字母是小写字母p,其ASCII码是112。

b)car>tree的值为true,因为car的第一个字母是小写字母s,其ASCII码是115,而tree的第一个字母是小字字母o,其ASCII码是111。

c)girl<boy的值为true,因为girl的第一个字母是大写字母J,其ASCII码是74,与boy的第一个字母完全相同。当表达式左边字符串第一个字符匹配于右边字符串的第一个字符时,就检测下一个字符。在这种情况下,girl和boy的第二个字母也相同,都是小写字母o。然后再检测下一个字母,这时就可找到答案了。girl的第三个字母是小写字母a(ASCII码是97),而boy的第三个字母是e(ASCII码是101)。因为97小于101,所以这个表达式的值是true。

d)car<=car的值为true,因为如果左边的值小于右边的值或者两个值是相同的,那么这个关系操作符返回true。

e)kangaroo!=boy的值为true。尽管两个字符串对应位置上的每个字母都相同,但是kangaroo的第一个字母是小写字母j(ASCII码是106),boy的第一个字母是大写字母J(ASCII码是74),而106与74不同,因此这两个变量持有的值不同。

f)tree!=tree的值为false,因为两个变量的值相同,所以说它们不同是错误的。

2.4节检查点

2.15 找出下列每个字符的ASCII码值:

a)Q

b)q

c)/

d)4

e)&

2.16 如果X=2、Y=3和Z=9,给出下列每个表达式的值:

a)X>Y

b)Y<=Z

c)Y*Y!=Z

d)X==Y

2.17 如果K=4、M=7和P=2,给出下列每个表达式的值:

a)K>M*P

b)(K*K)/P>=M

c)K+2!=K+P

d)M*M==M*(K+3)

2.18 描述赋值操作符(=)和比较操作符(==)之间的不同。

2.19 如果B=“B”、b=“b”、F=“+”、G=“9”和H=“b”,给出下列每个表达式的值:

a)B>b

b)F<=G

c)B!=G

d)b==H

2.20 如果red=“red”、green=“green”、gold=“gold”和jewel=“golden”,给出下列每个表达式的值:

a)red>green

b)green<=gold

c)gold!=jewel

d)jewel==green