其實前一章的布林值變數型別裡面我們就曾經講到邏輯判斷了,就是透過底下的方式來取得邏輯判斷的回傳值為 true 或 false
var logic1 = ( bmi > 24 );
此時 logic1 只會取得 true 或 false 這種布林值型別的值而已。所以說,邏輯運算就是答案為『 true 』或『 false 』的運算啊! 一般的邏輯運算式,大致是這樣的:
變數或常數 關係運算 變數或常數 A > 15 B <= 12 變數或常數 等於運算 變數或常數 S == Q Y != Q
你可以看到關係運算主要就是大於等於小於之類的符號,至於驚嘆號 (!) 有『不是、反向』選擇的意思,這些運算都只會回傳 true 或 false 喔! 因為是邏輯運算啊!
如果要同時滿足兩個以上的條件才邏輯判斷為真,那就是我們以前學數學所謂的 and 囉!如果是兩個條件的任何一個成立時,就會回傳值為真, 那就是 or 囉!例如前一章提到的 BMI 計算結果:
var bmi; ( bmi > 18.5 ) && ( bmi < 24 ) // BMI 需要同時大於 18.5 與小於 24 才是真 ( bmi < 18.5 ) || ( bmi > 24 ) // BMI 小於 18.5 或者是大於 24 都可接受為真
所以,這個時候 && 以及 || 的協助就非常重要了!另外,邏輯判斷完畢之後,當然重點就是得要設計『當回傳 true 時,要進行什麼事? 而當回傳 false 時,則是進行另外的什麼事』這樣。那如何設計這方面的程式呢?這時最好先要有流程圖的概念:
使用 if 進行邏輯判斷,主要的語法是這樣的:
if (邏輯判斷) {
// 當回答為 true 時的工作
...
}
但是,總有邏輯判斷總有真假吧?所以,如果真假兩件事分別依據邏輯判斷回應值而進行的話,就會變這樣:
if (邏輯判斷) {
// 當回答為 true 時的工作
程式碼...
} else {
// 當回答為 false 時的工作
程式碼...
}
那如果有多個選項呢?基本上可以透過多重邏輯判斷的,例如:
if (邏輯判斷-1) {
// 當邏輯判斷-1 回答為 true 時的工作
程式碼...
} else if (邏輯判斷-2) {
// 當邏輯判斷-2 回答為 true 時的工作
程式碼...
} else {
// 當邏輯判斷-1 與 邏輯判斷-2 回答都是 false 時的工作
程式碼...
}
若只有真與假,那使用 if () {} else {} 即可,但如果一個判斷裡面有多種狀態呢?例如上面 BMI 的案例中,如果有體重過輕 ( BMI < 18.5)、 體重優良 (18.5 ≤ BMI < 24)、體重稍重 (24 ≤ BMI < 28) 與肥胖 (28 ≤ BMI)等,那處理的方案就得要使用多重狀態, 亦即增上多個 else if 即可喔!
假設我們需要計算面積,而且需要依據不同的形狀來提供使用者輸入的資訊,這該如何設計?最簡單,就是將所有需要出現的, 通通給它放上來即可。問題是,這樣對於使用者的提示來說,好像有點混亂。
所以,我們是否能夠依據使用者點選不同的面積時,才出現所需要的 input 資訊?然後提供計算的結果呢? 似乎可以透過 if 的方式,當使用者點選相關的形狀後,再來使用 innerHTML 處理吧!設計看看:
某些時刻我們需要『重複』進行某件事情,如果你重複兩三次程式碼,可能還覺得沒什麼了不起,但是,如果你需要的是幾十次、幾百次重複的程式碼,並且需要 (1)指定固定的次數或者是 (2)需要某個情境下才結束(或開始)某個持續不斷的程式碼,這個時候,你不能使用撰寫多次程式碼的方式, 而是需要透過『使用迴圈來執行某些個特定的程式碼』,這樣的想法才合理。例如底下的流程:
你可以發現圖示的箭頭中,當某條件持續成立時,就會持續不斷的運作右側的程式,直到條件失敗為止,這就是迴圈了。 JavaScript 通常可以使用兩種方式來執行迴圈,分別是:
我們先來介紹簡單的 for 迴圈,for 迴圈的基本語法有點像底下這樣:
for ( 變數初始值; 條件運算式; 變數變化步階) {
procedure ...
...;
}
// 例如底下的範例,從 0 到 99 之間的執行順序
var i;
for ( i = 0; i < 100; i++ ) {
....
}
有很多時候,迴圈不是一層而已,可能迴圈裡面還有迴圈,這就是雙層迴圈啦!那麼如何測試雙層迴圈呢?最簡單的方法,就是透過製作 9X9 乘法表啦! 因為 9X9 乘法表,就得要透過兩層 1~9 的互相乘法來處理才行啊!
上面的案例只是將結果列出來而已~顯示的效果當然是很糟糕!如果你將每個第一層迴圈的開始與結束,都加上 div 的話,那麼就能夠隔出 8 個 div 了! 同時,將 div 加入 display: inline-block 的話,就能夠處理的比較完美!請依據這個想法,設計出 9-3-3.html 的內容。