我试图理解一些js概念的基本原理,特别是我的函数返回定义值的原因
accountName只是一个简单的字符串,例如" facebook" 帐户的返回值只是一个数组
原始功能
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,而工作版本返回正确的结果。为什么会这样?我是否一直在迭代我的阵列?
答案 0 :(得分: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