迭代一系列函数

时间:2014-09-06 05:32:08

标签: javascript arrays

我有以下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

由于我正在迭代一系列函数,因此我并没有" #of;应该是"功能"和i.toString()应该是"函数f(){}"?

5 个答案:

答案 0 :(得分: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);
});

答案 1 :(得分:1)

当您使用for(var in in ...)迭代对象的键时,我将等于键 - 在数组的情况下,您将获得索引以及数组的属性(0,1,2,长度,等)索引或属性键的类型很可能是一个字符串。

您想要访问该键的数组值,因此您需要执行arrOfFuncs[i] - 也就是说,如果您可以使用.forEach或某些等效项可能更好

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

因为您可以避免访问不希望访问的阵列属性的风险。

答案 2 :(得分: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

答案 3 :(得分:0)

在你的代码中我是关键它不值。所以你的代码应该像这样得到函数类型:

function f(){
}

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

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

答案 4 :(得分:0)

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

以下代码有效:

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

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