2017-02-14 133 views
-2

當使用for..in構造循環JavaScript對象時,我偶然發現了這個令人費解的錯誤。我有一組的虛擬數據與此類似:JavaScript內部變量undefined For循環中

{ 
    "12345678" : { 
    ... 
    }, 
    "12345679" : { 
    ... 
    }, 
    "12345680" : { 
    ... 
    } 
} 

也許它很重要,這個目的是從火力地堡數據庫使用檢索到的響應的內置.val()方法。這是一個普通的js對象。

但是,在遍歷對象時,內部的內部的for..in循環在某種程度上未定義。我已經刪除除循環中的所有周圍的代碼,並且仍然出現錯誤:

for (key in data) { 
console.log(data[key]); 
} 
// Throws ReferenceError: key is not defined 

我真是百思不得其解。這怎麼可能?我認爲傳遞給for..in的變量在循環內總是可用(或至少定義)。

+1

你是否在某處定義了'key'?像'for(var key in data)'?另外,你是否嘗試用'JSON.stringify(data,null,4)'這樣的東西打印'data'? – mc10

+0

嗯,那很愚蠢。沒有在任何地方聲明爲'var'。我一直在這半個小時左右都在搞這個。我想是時候睡覺了。 – ppajer

回答

1

正如我在評論中提及,你可能會需要定義key;否則,你會(可能)定義一個全局變量,它可能會或可能不會正常工作。此外,爲避免出現在你的循環無關的屬性,使用hasOwnProperty

for (var key in data) { 
    if (!data.hasOwnProperty(key)) { 
     continue; 
    } 

    console.log(data[key]); 
} 

進一步的信息,請參閱How do I loop through or enumerate a JavaScript object?

+0

感謝您對'hasOwnProperty'的建議。最初的錯誤是一個疏忽,但這是我應該真正開始使用的東西。 – ppajer

0

你只是不使用正確的語法for..in聲明。 您需要定義key變量,var(或let如果你使用ES6):爲了在聲明中使用它:

for(var key in data){ 
    console.log(data[key]) 
} 
+0

就是這樣,謝謝!我認爲當人們開始忽略像這樣的東西時,該睡覺了。 :) – ppajer