For語句的衍生物件
在js中一般使用的迴圈有兩種:
1.常規的for(var i=0;i<length;i++)
2.for-in:for(var item in list)
3.for of
描述
對應於一個物件的每個屬性,或一個數組的每個元素,執行一個或多個語句。
語法
for (variable in [object | array])
statement
for 語句的語法組成如下:
部分 描述
variable 一個變數,它可以是 object 的任一屬性或 array 的任一元素。
object, array 要在其上遍歷的物件或陣列。
statement 相對於 object 的每個屬性或 array 的每個元素,都要被執行的語句。可以是複合語句。
說明
在迴圈的每次迭代前,variable 被賦予 object 的下一個屬性或 array 的下一個元素。然後可以在迴圈內的任一語句中使用它,就好像正在使用 object 的該屬性或 array 的該元素一樣。
當在一個物件上迭代時,沒有辦法決定或控制把物件的成員賦給 variable 的次序。在陣列內將按元素的次序執行迭代,也就是,0、1、2、……
下面示例說明了 for ... in 語句的用法,它把一個物件用作一個聯合陣列:
function ForInDemo()
{
// 建立某些變數。
var a, key, s = "";
// 初始化物件。
a = {"a" : "Athens" , "b" : "Belgrade", "c" : "Cairo"}
// 迭代屬性。
for (key in a)
{
s += a[key] + "<BR>";
}
return(s);
}
注意 使用 enumerator 物件來迭代集合的成員,for … in迴圈由於歷史遺留問題,它遍歷的實際上是物件的屬性名稱。一個Array陣列實際上也是一個物件,它的每個元素的索引被視為一個屬性。
for … of迴圈是ES6引入的新的語法,用for … of迴圈遍歷集合,用法如下:
var a = ['A', 'B', 'C'];
var s = new Set(['A', 'B', 'C']);
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (var x of a)
{ 遍歷Array alert(x);'A', 'B', 'C' }
for (var x of s)
{ 遍歷Set alert(x);A', 'B', 'C' }
for (var x of m)
{ 遍歷Map alert(x[0] + '=' + x[1]);1='x',2='y',3='z' }
for … of迴圈則完全修復了這些問題,它只迴圈集合本身的元素