JavaScript 學習之路-語法篇(下)
這段時間一直在期末複習,這幾天考完試末,輕鬆了許多,終於放假啦。
上篇文章(很久了)說的是 JavaScript 的操作符,有相等操作符、條件操作符、賦值操作符等等,這篇文章寫的是語法篇的最後兩個內容:語句
和函式
。
語句
語句由一個或多個片語成,可以完成某些任務和操作。
if 語句
最常用也很熟悉的語句了,它的語法如下:
if (condition) { block1 } else { block2 }
其中 condition 會被轉換成一個布林值來確定執行那一塊程式碼,例如如果 condition 為 true,則執行 block1 的程式碼,否則執行 block2 。如果想要更省事一點,也可以直接用三目運算子來替代 if 語句,例如下面的程式碼跟上述的 if 語句是一樣的,
condition ? block1 : block2 ;
do-while 語句
一種迴圈語句,它會至少先執行迴圈體內的程式碼一次,然後在根據條件判斷是否繼續迴圈,語法如下:
do { code } while (condition);
while 語句
看看它的語法,比較下跟 do-while 的區別:
while (condition) { code }
可以看到,while 迴圈語句是上來就開始判斷 condition 是否為 true ,是的話才會執行程式碼,否則不會執行;而前面的 do-while 迴圈是會至少執行一次程式碼再來判斷條件,這就是區別。
for 語句
依然是迴圈語句,而且也是經常使用的迴圈語句。它的語法如下:
for ( init; expression; loop-expression) { code }
怎麼使用它呢?下面的程式碼會輸出 1 到 10 之間的數:
for (var i = 1; i<=10; i++) { console.log(i); }
其實 while 迴圈能做到的,for 迴圈也同樣能做到,上面的如果用 while 迴圈是這樣:
var i = 1; while (i <= 10) { console.log(i); i++; }
既然這樣,那還要 for 迴圈幹嘛呢?for 迴圈可以做到根據已知條件來確定迴圈次數,比如你要列印某個數 10 次,那用 for 迴圈,中間 i < 10 直接寫就好了;但如果事先並不知道要迴圈多少次,條件也不是很清楚,那麼用 while 迴圈先執行著也是不錯,如果這段程式碼要先被執行一次,那就用 do-while 好了。
for-in 語句
是一種迭代語句,可以用來列舉物件的屬性,非常實用的語句。語法如下:
for (var propName in window) { document.write(propName); }
執行這段程式碼你將看到瀏覽器 window 物件的所有可列舉屬性。
label 語句
label 語句可以在程式碼中新增標籤,以便將來使用,語法如下:
labelName: code
通常會與 for 等迴圈語句配合使用,由 break 或 continue 語句來引用。
break 和 continue 語句
break 語句可以讓程式碼停止執行,用在 for 語句中會立即退出迴圈;而 continue 語句也是讓程式碼停止執行,但它不會退出迴圈,而是從迴圈的頂部繼續執行,也就是在執行下一次迴圈。
for (var i = 1; i <=10; i++) { if ( i % 5 == 0) { console.log(i); break; } }
上面的程式碼找出 10 以內能被 5 整除的數,找到了就輸出,而且找到了就不找了,立刻停止退出迴圈,最後輸出的結果是5
。而如果使用 continue 替代 break 呢?
for (var i = 1; i <=10; i++) { if ( i % 5 == 0) { console.log(i); continue; } }
答案顯而易見,會輸出5
以及10
。因為找到了一個 5 之外,continue 的意思是不用再執行下面的程式碼了,從頂部開始下一次迴圈再找。
with 語句
with 語句可以簡化程式碼量,以一個特定的物件來開頭,減少重複書寫它的次數,例如下面的程式碼:
var qs = location.search; var hostName = location.hostname; var url = location.href;
每次都需要用到 location 這個物件,我們可以把它關聯起來,用 with 語句改寫:
with (location) { var qs = search; var hostName = hostname; var url = href; }
這樣就不必時刻寫 location 欄位了,需要注意的是,該語句在嚴格模式
下是報錯不能用的。
switch 語句
最後一個是 switch 語句,它是為了解決 if 語句分支過多過長的問題,例如下面這段冗長的 if 語句程式碼:
if ( i == 100) { alert('恭喜你考了滿分'); } else if ( i == 90) { alert('優秀'); } else if (i == 80) { alert('很不錯'); } else if (i == 70) { alert('勉強還行'); } else if (i == 60) { alert('在掛科的邊緣瘋狂試探'); } else { alert('騷年,補考見'); }
switch 語句為了優化上述程式碼,寫成這個樣子:
switch (i) { case 100: alert('恭喜你考了滿分'); break; case 90: alert('優秀'); break; case 80: alert('很不錯'); break; case 70: alert('勉強還行'); break; case 60: alert('在掛科的邊緣瘋狂試探'); break; default: alert('騷年,補考見'); }
switch 語句的好處是能根據條件 i 的值,來決定是到那一段 case 程式碼中去執行,並且執行完後就 break 掉,而不執行接下來的其它 case ,這樣條例清晰、一一對應,而 default 就是上面所有 case 都不管用了,那就預設執行它裡面的內容。
上面這九大語句,基本就是一門程式語言中常用到的語句了,基本上其它程式設計語句也都是這麼幾種,只不過語法稍微有所差別,寫法不同而已,只要熟悉了上述這幾種語句,在其他語言中同樣適用,畢竟語言是互通的。
函式
函式也是每門程式語言都會有的語法概念。有沒有相過,如果一個頁面裡面充斥著大量的語句,這些語句實現著各種功能,有些還經常是重複的,你其實多寫了幾遍。這時候,你可以考慮把這些語句
集合起來,封裝成一個函式
。函式
就是封裝了任意多條語句,每次需要用的時候就呼叫它,通過什麼標識來區別函式呢?函式名,js 中函式使用function
關鍵字來宣告,後面緊接的就是函式名,在接著就是圓括號,裡面存放的是函式的引數,用,
隔開,最後就是函式的主體程式碼了。
function funName(arg1,arg2,arg3) { code }
上面就是 js 定義一個函式的格式。函式可以有一個return
語句,表示該函式返回結果,如果使用了 return 語句,則後面的程式碼一概不會被執行,比如下面這樣:
function sum(a,b) { return a + b; console.log('hello world'); }
輸入兩個引數值 a 和 b 呼叫 sum 函式,可以計算 a + b 的結果,但後面那句 hello world 是不會被執行了,因為 return 語句就是最終語句了,函式遇到 return 後就會立即停止退出。另外,還有一個arguments
類陣列物件一直存放著函式的引數,使用 arguments 可以獲取函式的引數資訊,比如上面的 sum 函式,以下程式碼:
function sum(a,b) { return a + b; console.log('hello world'); console.log(arguments.length); }
當你sum(10,20)
呼叫函式後,最後那句程式碼會輸出2
,因為你輸入了 10、20 兩個引數,長度為 2 ,前面說了,arguments
存放的是引數的資訊,它是一個類似陣列的東西,所以你可以用arguments[0]
表示第一個引數,也就是 10;用arguments[1]
表示第二個引數,也就是 20 。
由於 js 的函式引數實際上是一個數組,所以不傳值或者少傳多傳都不會報錯,這點可以說是非常寬鬆的,相比其他語言來說。你可以隨意輸入多個引數,只不過會顯示 undefined 。
js 的函式沒有過載
這一概念,如果定義兩個名字相同函式,則後者覆蓋前者。但由於有 arguments 陣列的存在,可以通過使用 if 語句判斷傳入的 arguments 引數來相應執行不同的程式碼,也算是模擬過載。
(全文完)
喜歡就點右下方的要你「好看」!