繁体   English   中英

遍历一系列函数

[英]Iterating over an array of functions

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

由于我要遍历一组函数,因此“ typeof i”应该不是“ function”吗,i.toString()应该是“ function f(){}”吗?

否。for 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);
});

当使用for(var in in ...)遍历对象的键时,我将等于键-对于数组,您将获得数组的索引和属性(0、1、2,长度等等),并且该索引或属性键的类型很可能是字符串。

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

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

因为避免了访问数组中的属性的风险,所以您不打算访问。

当您使用for..in时,您正在运行键而不是值。 阅读有关JavaScript for..in循环的信息

此代码将执行您想要的操作:

function f(){
}

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

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

JSFIDDLE

在您的代码中,我是关键,它不重要。 因此您的代码应像这样获取函数类型:

function f(){
}

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

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

在数组迭代中,我不代表元素,而是代表索引。

下面的代码有效:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM