JavaScript高級程序設計(3)基本概念
語法:通常使用一或多個關鍵字來完成給定任務。
if語句:
條件可以是任意表達式;而且對這個表達式求值的結果不一定是布爾值。ECMAScript會自動調用Boolean()轉換函數將這個表達式的結果轉換為一個布爾值。如果求值結果為true,則執行語句1,如果求值結果是false,則執行語句2。這兩個語句既可以是一行代碼,也可以是一個代碼塊(一對花括號括起來的多行代碼)
if(i > 25) { alert("Great than 25."); //單行語句 } else { alert("Less than or equal to 25."); //代碼塊中的語句 }
即使只有一行代碼,也要始終使用代碼塊。
do-while語句:
後測試循環語句:對表達式求值之前,循環體內的代碼至少會被執行一次。
var i = 0; do{ i += 2; }while(i < 10); alert(i);
while語句:
前測試循環語句:循環體內的代碼有可能永遠不會被執行。
var i = 0; while(i < 10){ i += 2; } alert(i);
for語句:
前測試循環語句:但是它具有執行循環之前初始化變量和定義循環後要執行的代碼的能力。也有可能不會執行循環體中的代碼。
var count = 10; //var i; for(var i = 0; i < count; i++) //循環變量初始化語句; 循環條件; 改變循環變量的語句 { alert(i); //循環體 } alert(i) //10
循環變量初始化語句是可以省略的;也可以初始化多個值; 初始化循環中所用的變量
循環條件是可以省略的;但是必須在循環內提供break; 評估初始變量的條件
改變循環變量的語句是可以省略的,增量可以是負數或者更大 增加初始變量的值。
如果全都省略,就會創建一個無限循環。
使用while循環做不到的,使用for循環同樣也做不到。
for循環的變量初始化語句,可以不使用var關鍵字,在外部執行。
即使 i 是在循環內部定義的一個變量,但是在循環外部任然可以訪問到它。
for-in語句:
一種精準的叠代語句,可以用來枚舉對象的屬性。
for (var propName in window) { document.write(propName); }
這個例子中,使用for-in循環來顯示了BOM中的window對象的所有屬性。每次執行循環時,都會將window對象中存在的一個屬性名賦值給變量propName。這個過程會一直持續到對象中的所有屬性都被枚舉一遍為止。
ECMAScript對象的屬性沒有順序,通過for-in循環輸出的屬性名的順序是不可預測的。具體來講,所有屬性都會被返回一次,但是返回的先後次序可能回因瀏覽器而異。
如果叠代的對象的變量值為null或undefined,for-in語句會拋出錯誤。不再執行循環體。
label語句:
可以在代碼中添加標簽,以便將來使用。
start:for(var i = 0; i < count; i++) { alert(i); }
這個例子定義的start標簽可以在將來由break或continue語句應用。加標簽的語句一般都要與for語句等循環語句配合使用。
break和coutinue語句:用於循環中精確地控制代碼的執行。
break語句會立即退出循環,執行循環後面的語句;
continue語句也是立即退出循環,但退出循環後會從循環的頂部繼續執行;
var num = 0; var num = 0; for(var i=1; i<10; i++) for(var i=1; i<10; i++) { { if(i % 5 == 0) if(i % 5 == 0) { { break; continue; } } num++; num++; } } alert(num); /*4*/ alert(num); //8
break和continue語句都可以與label語句聯合使用,從而返回代碼中特定的位置。這種聯合使用的情況多發生在循環嵌套的情況下。
var num = 0; var num = 0; outermost: outermost: for(var i=0; i<10; i++) for(var i=0; i<10; i++) { { for(var j=0; j<10; j++) for(var j=0; j<10; j++) { { if( i==5 && j ==5) if( i==5 && j ==5) { { break outermost; continue outermost; } } num++ num++ } } } } alert(num);/*55*/ alert(num);//95
建議如果使用label語句,一定要使用描述性的標簽,同時不要嵌套過多的循環。
with語句:看書了解,不建議使用不詳述。
switch語句:
swith語句與if語句的關系最為密切,而且也是在其他語言中普遍使用的一種流控制語句。
switch (expression) case value: statement; break; case value: statement; break; case value: statement; break; case value: statement; break; ... case value: statement; break; default: statement;
每個情況(case)都是表示“如果 expression 等於 value,就執行 statement”。
關鍵字 break 會使代碼跳出 switch 語句。如果沒有關鍵字 break,代碼執行就會繼續進入下一個 case。
關鍵字 default 說明了表達式的結果不等於任何一種情況時的操作(事實上,它相對於 else 語句)。
可以在switch語句中使用任何數據類型,字符串和對象都可以。每個case的值都不一定是常量,可以是變量。甚至是表達式。
switch語句在比較值時使用的是全等操作符,因此不會發生類型轉換。(字符串 "10" 不等於數值10)。
函數:
通過函數可以封裝任意多條語句,而且可以在任何地方任何時候調用執行。ECMAScript中的函數使用function關鍵字來聲明,後跟一組參數以及函數體。
函數可以通過其函數名來調用,後面還要加上一對圓括號和參數(圓括號中的參數如果有多個,可用逗號隔開)。
任何函數在任何時候都可以通過return語句後跟要返回的值來實現返回值。函數執行完return語句之後停止並立即退出。
未指定返回值的函數返回的是一個特殊的undefined值。
要麽函數始終都返回一個值,要麽永遠都不要返回值。不然函數有時候返回值,有時候又不返回值,會給調試代碼帶來不便。
參數:
ECMAScipt不介意傳遞進來多少參數,也不在乎參數是什麽數據類型。並且可以通過arguments對象來訪問這些參數。
沒有傳遞值的命名參數將自動被賦予undefined值。
ECMAScript中的所有參數傳遞的都是值,不可能通過引用傳遞參數。
沒有重載:由於不存在函數簽名的特性,ECMAScript函數不能重載。
JavaScript高級程序設計(3)基本概念