数组中的对象 - 在一个范围内工作但在另一个范围内不工作?

时间:2010-06-10 01:13:14

标签: javascript arrays object

好的,我一直在学习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,但它产生未定义。

我做错了什么?

2 个答案:

答案 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];

我想,我会做的。