我确信这对JS专家来说是一个简单的问题.不幸的是,我不是其中之一.
我有以下情况.我在函数b中创建了一个数组,我用一些新对象填充.然后我将该数组返回到函数a(调用函数b).
当我遍历返回的数组时,内容都是未定义的.关闭袖口我认为JS垃圾收集器可能涉及到这里.我该如何解决这个问题?
此致
MJ
function a()
{
var x = b();
for( var v in x ){
//print out v.id and v.name
}
}
function b()
{
var y = new Array();
var m = new Object();
var n = new Object();
m.id = 1;
n.id = 2;
m.name = "alpha";
n.name = "bravo";
y.push( m );
y.push( n );
return y;
}
Run Code Online (Sandbox Code Playgroud)
CMS*_*CMS 12
问题是你如何"迭代"你的数组.您正在使用该for-in语句,此语句应该用于枚举对象属性,而不是迭代数组或类似数组的对象.
从您的代码:
for( var v in x ){
//print out v.id and v.name
}
Run Code Online (Sandbox Code Playgroud)
在for-in每个循环语句将饲料v与每个属性的名称,因为您使用的是阵列在你的榜样,v会'0','1'等等.
您可以访问x[v]但我真的鼓励您使用顺序for循环,例如:
for (var i = 0; i < x.length; i++) {
alert(x[i].id);
alert(x[i].name);
}
Run Code Online (Sandbox Code Playgroud)
有许多原因可以避免for-in,当您的目的是对像对象这样的数组上的数字索引进行"迭代"时,请参阅以下问题以获取更多信息: