2014-09-06 98 views
0

一個數組,我有以下的JavaScript代碼:迭代的功能

function f(){ 
} 

var arrOfFuncs = [f, f, f, f]; 

for (var i in arrOfFuncs){ 
    console.log(typeof i); 
    console.log(i); 
} 

當我運行該腳本,它打印:

string 
0 
string 
1 
... 
string 
3 

因爲我迭代函數數組,ISN」 t「typeof我」應該是「功能」和i.toString()應該是「功能f(){}」?

+0

哪些瀏覽器您使用? – Arvind 2014-09-06 05:37:45

+0

我使用Chromium瀏覽器。 – user3457382 2014-09-06 15:59:05

回答

2

號的for…in構建迭代的密鑰的對象或數組,而不是它的

您可以使用一個簡單的for循環:

for (var i = 0; i < arrOfFuncs.length; i++){ 
    console.log(typeof arrOfFuncs[i]); 
    console.log(arrOfFuncs[i]); 
} 

或修改for…in循環是這樣的:

for (var i in arrOfFuncs){ 
    console.log(typeof arrOfFuncs[i]); 
    console.log(arrOfFuncs[i]); 
} 

或者你可以使用forEach方法(在ECMAScript中5.1中引入):

arrOfFuncs.forEach(function(f) { 
    console.log(typeof f); 
    console.log(f); 
}); 
0

當您使用for..in您正在運行鍵但不超過值。 閱讀關於JavaScript for..in loops

該代碼會做你想要什麼:

function f(){ 
} 

var arrOfFuncs = [f, f, f, f]; 

for (var i in arrOfFuncs){ 
    console.log(typeof arrOfFuncs[i]); 
    console.log(i); 
} 

JSFIDDLE

0

在你的代碼中我是它的關鍵沒有價值。所以你的代碼應該是這樣獲得的功能類型:當你重複的進行for(var in in ...)對象我將等於鍵的鍵

function f(){ 
} 

var arrOfFuncs = [f, f, f, f]; 

for (var i in arrOfFuncs){ 
    console.log(typeof arrOfFuncs[i]); 
    console.log(arrOfFuncs[i]); 
} 
1

- 在你所得到的指數數組的情況下,以及性能數組的長度(0,1,2,長度等)以及該索引或屬性鍵的類型很可能是一個字符串。

您要訪問在該鍵的數組的值,所以你需要做的arrOfFuncs[i] - 這麼說,這可能是更好的爲使用.forEach或者一些等價的,如果你能或使用

for (var i = 0, l = arrOfFuncs.length; i < l; i++) { 
    var value = arrayOfFuncs[i]; 
} 

因爲您可以避免訪問陣列中訪問陣列屬性的風險。

0

in for iteration over arrays,我不代表元素,它代表索引。

下面的代碼工作:

var array = [function f(){}, function k(){}]; 

for (var i in array) { 
    console.log(array[i]); //function() 
    console.log(typeof array[i]); //function 
}