我有以下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(){}"?
答案 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);
}
答案 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
}