2016-03-20 29 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正在迭代我的数组索引!谢谢! –