(k ゚∀゚)<我們的確會經常遇到這種情況,例如,我想檢查變數a的數值是否在0至100之間,即是要同時符合a<=100和a>=0這兩項條件。
(k ゚∀゚)<數理邏輯裡有AND(且)、OR(或)、NOT(非)等運算,而TJS亦提供了一些叫邏輯運算子(Logical operator)的運算子,包括&&(AND)、||(OR)、!(NOT)這三種運算子。
(k ゚∀゚)<首先介紹一下&&這個運算子,&&代表AND,必須兩者都是true,才能得到true,如果任何一個是false,最後都會得到false。
(k ゚∀゚)<以下是一些例子。
a | b | a&&b |
---|---|---|
0 | 0 | 0 |
非零值 | 0 | 0 |
0 | 非零值 | 0 |
非零值 | 非零值 | 1 |
非零值是什麼意思?>( ゚ω゚ s)
(k ゚∀゚)<非零值即是任何零以外的數值,例如1、-1、2.1等,在條件式裡,吉里吉里會把這些數值當成true,而0則會當成false。
難怪說2&&3之類那麼奇怪的運算也可以接受?>( ゚ω゚ s)
(k ゚∀゚)<是的,不過運算後傳回的值往往會用1來代表true,例如2&&3會傳回1來代表true。
(k ゚∀゚)<之後我們介紹一下||;這個運算子,||代表OR,只要任何一個的值是true,就會得到true,唯有兩者都是false,才能得到false。
(k ゚∀゚)<以下是一些例子。
a | b | a||b |
---|---|---|
0 | 0 | 0 |
非零值 | 0 | 1 |
0 | 非零值 | 1 |
非零值 | 非零值 | 1 |
(k ゚∀゚)<最後介紹的是!,!代表NOT,使用後的值變成相反的,true變成false,false變成true。
(k ゚∀゚)<以下是一些例子。
a | !a |
---|---|
0 | 1 |
非零值 | 0 |
那麼這些邏輯運算子的優先順序是怎麼樣,如果我寫成以下的模樣,到底哪個會優先?>( ゚ω゚ s)
var a=!0 || 0 && 0;
System.inform(a);
System.inform(a);
(k ゚∀゚)< ! 這個運算子的優先順序其實十分高,甚至比加減乘除等算術運算子還要高,所以在上述的例子裡,會優先做了 ! 這個運算子,至於&&和||相比,&&僅勝於||,所以以下是吉里吉里執行時的順序。
a=!0 || 0 && 0
a=1 || 0 && 0
a=1 || 0
a=1
a=1 || 0 && 0
a=1 || 0
a=1
唔……它們的優先順序好像有點難記起來>( ゚ω゚ s)
(k ゚∀゚)<的確是的,所以為了確保優先順序,建議使用括號來區分它們的順序,這樣亦令自己更容易理解順序。
(k ゚∀゚)<今次就介紹到這裡,下次再見。
沒有留言:
發佈留言