2010-09-23 55 views
1

我要訪問的對象[] JSON作爲文字使用FOR...IN數組。但通過FOR...IN迭代給出的對象xundefined。請參閱下面的代碼。無法訪問FOR ...在Javascript數組

var myJSONObject = [ 
    {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"}, 
    {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"}, 
    {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"} 
]; 

for (var x in myJSONObject) { 
    alert(x['method']); 
} 

您可以測試代碼在這裏在線@JSBin

問候,
穆奈姆

+1

這不是一個JSON陣列,這是一個Javascript數組:JSON僅僅是一個符號(JavaScript對象符號)。 – 2010-09-23 13:44:29

回答

1

嘗試

for (var x in myJSONObject) { 
    alert(myJSONObject[x]['method']); 
} 
+0

這個工程!謝謝!你能解釋一下嗎?我將'x'看作'undefined','myJSONObject [x]'如何工作? – 2010-09-23 13:39:52

+4

不要使用'對... in'遍歷數組:https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in#Description – 2010-09-23 13:43:32

+1

'x'在這種情況下,是一個標識符,而不是實際的元素。所以,在第一次迭代中,'x'將等於'0'。但是,正如Marcel所述,在迭代數組時,應該使用標準的'for'循環。 – 2010-09-23 13:58:44

0

的了..在語法給你的鑰匙迭代的對象,而不是值。因此,你必須做到以下幾點:

for (var idx in myJSONObject) { 
    alert(myJSONObject[idx]['method']); 
} 
+0

請勿使用'for ... in'來迭代數組:https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...##### – 2010-09-23 13:43:10

5

你不應該迭代使用for … in數組:

雖然它可能是很有誘惑力使用 這樣的一種方式來遍歷一個 陣列,這是一個壞主意。除了 的 爲... in語句遍歷 用戶自定義屬性的數組元素,因此,如果您修改 陣列的非整數或 非積極性(例如,通過 加入了「foo」的屬性它甚至 通過添加一個方法或屬性 Array.prototype),for ...在 語句將返回您的 用戶定義的屬性的名稱,除了 數字索引。另外,由於爲了 迭代的是任意的, 迭代數組可能不能訪問數字順序 元件。因此,當在數組上迭代 時,使用具有數字索引的傳統for循環 更好些,這是 。

通過你的陣列就循環是這樣的:

for (var i = 0, length = myJSONObject.length; i < length; i++) { 
    alert(myJSONObject[i].method); 
} 

JSBin