for-in語句
for-in語句是一種精准迭代語句,可以用來枚舉對象的屬性,用以遍歷一個對象的全部屬性。
for…in聲明用於對數組或者對象的屬性進行循環操作;
for…in循環中的代碼每執行一次,就會對數組的元素或對象的屬性進行一次操作。
for-in的語法:
for (變量 in 對象) { 執行代碼 }
“變量”用來指定變量,指定的變量可以是數組元素,也可以是對象的屬性。
實例1:
for (var propName in window){ console.log(propName); }
在這個例子中,使用for-in循環來顯示了BOM中window對象的所有屬性。每次執行循環時,都會將window對象中存在的一個屬性名賦值給變量propName。這個過程會持續到對象中的所有屬性都被枚舉一遍為止。
與for語句相似,控制語句中的var操作符也不是必需的。但是為了保證使用局部變量,更加推薦按照完整的語法結構來寫。
實例二:
使用for…in數組來循環遍歷數組;
<html>
<body>
<script type="text/javascript">
var x var mycars = new Array() mycars[0] = "Saab" mycars[1] = "Volvo" mycars[2] = "BMW"
for (x in mycars) { console.log(mycars[x]) } </script>
</body>
</html>
如果要迭代的對象的變量值為 null 或 undefined,for-in語句會拋出錯誤。ECMAScript5更正了這一行為;對這種情況不再拋出錯誤,而是不再執行·循環體。為了保證最大限度的兼容性,最好在使用for-in循環之前,先確認該對象的值不是null或undefined。
迭代語句又叫循環語句,聲明一組要反復執行的命令,知道滿足某些條件為止。循環語句通常用於迭代數組的值(因此而得名),或者執行重復算數任務。
break和continue語句
break 和 continue 語句用於循環中精確地控制代碼的執行
- break語句, 會立即退出循環,強制繼續執行循環 后面的語句;
- continue語句, 雖然也是立即退出循環,但是退出循環之后會從循環的頂部執行。(退出當前次數循環,繼續執行剩余次數循環)
實例:
break 語句
var num = 0; for (var i=1; i < 10; i++) { if (i % 5 == 0) { break; } num++; } alert(num)
這個例子中的for循環,將變量 i 由 1 遞增到 10。在循環體內,有一個 if 語句檢查變量 i 的值是否可以被 5 整除,如果可以被 5 整除(%求模操作符)。
如果是,則執行 if 語句中的break語句,退出循環。
變量num從0開始,用於記錄循環執行的次數(計數器)。
在執行 break 語句退出循環之后,要執行的下一行代碼是alert() 函數,結果顯示4。
當變量 i 等於 5 時,循環總共執行了4次;而 break 語句的執行,導致了循環在 變量 num再次遞增之前就退出了。
continue 語句
如果在這個代碼中,將 break 語句換成 continue語句(continue語句雖然也是立即退出循環,但是退出循環之后會從循環的頂部執行)
運行for循環,將變量 i 由 1遞增到 10 。通過 if 語句判斷 i 是否可以被 5 整除,如果不可以整除就繼續執行
如果滿足條件,就執行 continue語句,退出當前次的循環不再執行 if 下面的代碼,繼續執行剩余次數循環
在本例中,遇到continue就跳出本次循環,直接跳到 i++
var num = 0; for (var i=1; i < 10; i++) { if (i % 5 == 0) { continue; } num++; } alert(num);
with語句
with用於設置代碼在特定對象中的作用域
with語法:
with(字符串) { 執行代碼; }
實例:
var sMessage = "hello"; with(sMessage) { alert(toUpperCase()); }
在這個例子中,with語句用於字符串,所以在調用 toUpperCase() 方法時,解釋程序將檢查該方法是否本地函數。
如果不是,它將檢查偽對象 sMessage,看它是否為該對象的方法。然后,alert輸出了"HELLO",因為解釋程序找到了字符串 "hello" 的toUpperCase() 方法。
注意:with 語句是運行緩慢的代碼塊,尤其是在已經設置了屬性值時。大多數情況下,最好避免使用with語句。