好的,我一直在学习Javascript的一些更高级的方面,现在尝试使用它,我被卡住了。
这是我的代码:
function Data(){}
function init(state){
var item;
item=new Data();
item.fieldrid=17;
item.description='foo';
state.push(item);
};
function findInState(state,fieldrid) {
for (var item in state) {
alert(item.fieldrid); //prints undefined
if (item.fieldrid == fieldrid) {
return item;
}
}
return null;
}
var s=[];
init(s);
alert(s[0].fieldrid); //prints 17 (expected)
alert(findInState(s,17).fieldrid); //exception here. function returns null.
正在运行的示例是here at jsbin
为什么这不起作用?我希望findInState
中的警报产生17,但它产生未定义。
我做错了什么?
答案 0 :(得分:3)
for (var item in state)
您不应该使用for..in
循环数组。
使用for (var i = 0; i < state.length; i++)
时,它可以正常工作。
请参阅https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Statements/for...in:
尽管使用它作为迭代数组的方法可能很诱人,但这是一个坏主意。
答案 1 :(得分:0)
在
alert(item.fieldrid); //prints undefined
您需要在该行之前访问数组状态[item],前置
item = state[item];
我想,我会做的。