2016-03-20 28 views
-1

我想了解一些JS概念的基本面中,具體爲什麼我的功能上定義的值不清楚從JavaScript forEach循環返回功能

帳戶名返回只是一個簡單的字符串,如「臉譜」 賬戶的返回值只是一個數組

原函數

function getAccount(accountName) { 
    var accounts = Storage.getItemSync('accounts'); 
    var matchedAccount 
    for(account in accounts){ 
     if (account.name === accountName){ 
     matchedAccount = accountName; 
     } 
    } 

    return matchedAccount; 
} 

工作版本

function getAccount(accountName) { 
    var accounts = Storage.getItemSync('accounts'); 
    var matchedAccount 

    accounts.forEach(function(account) { 
     if(account.name === accountName){ 
      matchedAccount = account 
     } 
    }); 
    return matchedAccount; 

} 

原始函數返回Undefined,而工作版本返回正確的結果。這是爲什麼發生?我不是在迭代我的數組嗎?

+2

提示:閱讀'for..in' –

+0

也針對[過濾器](HTTPS讀了文件://developer.mozilla。 org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) – Wainage

回答

1

這很簡單,但仍然是一個很好的問題。 在Javascript中forEach作品的陣列,而在對象(for x in y)工作*

而做的for..in陣列上的工作,因爲它通過枚舉對象字段,而不是指標。

看到這樣的回答:Why is using "for...in" with array iteration a bad idea?

MDN文檔: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

+0

啊我明白了。有道理,我的account.name不是accounts數組的enumerable屬性的一部分。我記錄了account和account.name,一個返回0,另一個返回undefined。這從我在文檔中閱讀的內容和鏈接中獲得了感官。 for .. in正在迭代我的數組索引!謝謝! –