官术网_书友最值得收藏!

2.4.2 關(guān)系操作符

有時發(fā)現(xiàn)一個問題的答案不像提出正確問題那樣重要。如果要編寫從一個長的名單中查找匹配Marguerita Gonzalez的程序,你會檢查列表中的每個名字并且詢問true/false問題:“這個名字與Marguerita Gonzalez相同嗎?”這個程序能夠運(yùn)行,但是極其沒有效率和耗時。然而,如果從列表中間挑選一個名字,并且詢問“通過比較兩個名字中每個字符的ASCII碼表示,Marguerita Gonzalez是否比這個名字大?”那么對這個問題的回答將立刻減少查找工作的一半。如果這個問題的答案是true,那么可以除去名單中的前半部分;如果這個問題的答案是false,那么可以除去名單中的后半部分。要詢問這種類型的問題,可以使用關(guān)系操作符。

有6個關(guān)系操作符,如表2-3所列。有的操作符是清楚的、簡單的,而有的操作符要么比較特殊,要么使用不熟悉的記號。你很可能從數(shù)學(xué)課中了解了大于符號(>)和小于符號(<),但是其他符號有必要討論一下。

表2-3 關(guān)系操作符

鍵盤上沒有單一符號表示小于或等于大于或等于的概念。這些概念通過組合以下符號表示:<=表示小于或等于,而>=表示大于或等于

類似地,沒有單一符號表示不等于的概念,它也使用了兩個符號。在JavaScript中,符號組合!=表示不等于操作符。

最后,需要特別注意等號。在程序設(shè)計中,以下兩件事情是有區(qū)別的:一是把一個東西設(shè)置為與另一個東西的值相同,二是詢問這樣一個問題“這個東西是否與另一個東西有相同的值?”當(dāng)將一個值賦給一個變量時使用等號(=),此時等號用做賦值操作符;而當(dāng)比較兩個東西的值時,意指“左邊東西的值與右邊東西的值是否相同?”此時稱為比較操作符。在JavaScript中,符號==(兩個等號)用于比較一個變量的值和另一個變量、值或表達(dá)式。

當(dāng)在語句中使用數(shù)學(xué)操作符時,其結(jié)果是一個新值。例如,3+5等于8和JavaScript語句myNum=3+5,將把值8放入變量myNum中。而關(guān)系操作符有所不同,關(guān)系操作符意指詢問一個問題而且其唯一可能的答案是yes或no(即計算機(jī)術(shù)語true或false)。例2.14說明關(guān)系操作符的使用。

例2.14 使用關(guān)系操作符

a)5<3的值為false,因?yàn)?不小于3。

b)7>6的值為true,因?yàn)?大于6。

c)9>=9的值為true,因?yàn)?gt;=詢問問題“左邊的東西是否大于或等于右邊的東西?”而9等于9,不大于9。

d)18!=6的值為true,因?yàn)?8與6不同。

e)18!=18的值為false,因?yàn)?8與18相同,因此語句“18與18不同”是錯誤的陳述。

f)12==12的值為true,因?yàn)?2與12相同。

g)12==45的值為false,因?yàn)?2與45不同。

關(guān)系操作符可以和其他操作符結(jié)合起來產(chǎn)生更復(fù)雜的條件和問題。例2.15示范如何使用變量混合關(guān)系和數(shù)學(xué)操作符表示值的例子。

例2.15 和變量一起使用關(guān)系操作符 對于這個例子,其中的變量有下列值:

a)W<(X+Y)的值為true,因?yàn)?小于(6+3)。

b)(Y*W)>X的值為false,因?yàn)?3*2)是6,而6不大于6。

c)(Y+Z)>=(W-Z)的值為true,因?yàn)?3+0)大于(2-0)。

d)X!=(W*Y)的值為false,因?yàn)?與(2*3)相同,所以說這兩個東西不相同是錯誤的。

e)(Z/X)!=Y的值為true,因?yàn)?0/6)與3不同。

f)(X-(W*Y))==Z的值為true,因?yàn)?6-(2*3))與0相同。

g)X==(X*Z)的值為false,因?yàn)?與(6*0)不同。

例2.16展示的程序說明賦值操作符和比較操作符之間的不同。

例2.16 比較操作,不是賦值

執(zhí)行時,顯示以下信息:

例2.17 使用關(guān)系操作符處理字符 對于這個例子,其中的變量有下列值:

a)R≤highA的值為false,因?yàn)榇髮懽帜窻的ASCII碼是82,大寫字母A的ASCII碼是65,而82不小于65。

b)lowa>highA的值為true,因?yàn)樾懽帜竌的ASCII碼是97,大寫字母A的ASCII碼是65,而97大于65。

c)x>=star的值為true,因?yàn)樾懽帜竫的ASCII碼是120,星號(*)的ASCII碼是42,而120大于42。

d)highA!=lowa的值為true,因?yàn)榇髮懽帜窤(65)的ASCII碼值與小寫字母a(97)不相同。

e)R!=R的值為false,因?yàn)榇髮懽帜窻的ASCII碼值是82,所以82與82不同是錯誤的。

例2.18說明如何使用關(guān)系操作符處理字符串。

例2.18 使用關(guān)系操作符處理字符串 對于這個例子,其中的變量有下列值:

a)car<food的值為false,因?yàn)閏ar的第一個字母是小寫字母s,其ASCII碼是115,而food的第一個字母是小寫字母p,其ASCII碼是112。

b)car>tree的值為true,因?yàn)閏ar的第一個字母是小寫字母s,其ASCII碼是115,而tree的第一個字母是小字字母o,其ASCII碼是111。

c)girl<boy的值為true,因?yàn)間irl的第一個字母是大寫字母J,其ASCII碼是74,與boy的第一個字母完全相同。當(dāng)表達(dá)式左邊字符串第一個字符匹配于右邊字符串的第一個字符時,就檢測下一個字符。在這種情況下,girl和boy的第二個字母也相同,都是小寫字母o。然后再檢測下一個字母,這時就可找到答案了。girl的第三個字母是小寫字母a(ASCII碼是97),而boy的第三個字母是e(ASCII碼是101)。因?yàn)?7小于101,所以這個表達(dá)式的值是true。

d)car<=car的值為true,因?yàn)槿绻筮叺闹敌∮谟疫叺闹祷蛘邇蓚€值是相同的,那么這個關(guān)系操作符返回true。

e)kangaroo!=boy的值為true。盡管兩個字符串對應(yīng)位置上的每個字母都相同,但是kangaroo的第一個字母是小寫字母j(ASCII碼是106),boy的第一個字母是大寫字母J(ASCII碼是74),而106與74不同,因此這兩個變量持有的值不同。

f)tree!=tree的值為false,因?yàn)閮蓚€變量的值相同,所以說它們不同是錯誤的。

2.4節(jié)檢查點(diǎn)

2.15 找出下列每個字符的ASCII碼值:

a)Q

b)q

c)/

d)4

e)&

2.16 如果X=2、Y=3和Z=9,給出下列每個表達(dá)式的值:

a)X>Y

b)Y<=Z

c)Y*Y!=Z

d)X==Y

2.17 如果K=4、M=7和P=2,給出下列每個表達(dá)式的值:

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”,給出下列每個表達(dá)式的值:

a)B>b

b)F<=G

c)B!=G

d)b==H

2.20 如果red=“red”、green=“green”、gold=“gold”和jewel=“golden”,給出下列每個表達(dá)式的值:

a)red>green

b)green<=gold

c)gold!=jewel

d)jewel==green

主站蜘蛛池模板: 兴和县| 巴彦淖尔市| 义乌市| 昌黎县| 夏邑县| 正宁县| 万荣县| 浑源县| 慈溪市| 莲花县| 肇源县| 阿克陶县| 体育| 视频| 嘉禾县| 防城港市| 宁德市| 张家界市| 平利县| 岳西县| 锦州市| 麻阳| 湟源县| 沙湾县| 南川市| 琼海市| 甘德县| 河北区| 泾阳县| 莫力| 达日县| 淅川县| 青田县| 明水县| 西和县| 武夷山市| 乌兰察布市| 泌阳县| 黄梅县| 同江市| 清苑县|