好吧,我一直在學習一些更高級的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,但相反,它產生未定義。
我在做什麼錯?
實際上,你可以遍歷它,'var item'只保存數組索引。你應該在'for'塊的剩餘部分使用'state [item]'而不是'item'。不用說,這確實不是循環訪問數組的首選方式:) – BalusC 2010-06-10 01:22:30
@BalusC好點。 – deceze 2010-06-10 01:23:08
@balus那麼什麼是「首選方式」?除了C風格'for(;;)'語法之外,我還缺少一些捷徑嗎? – Earlz 2010-06-10 01:27:23