[英]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);
}
在您的代码中,我是关键,它不重要。 因此您的代码应像这样获取函数类型:
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.