在Javascript中,相当于" foreach"循环是:
for(a in b){
// b[a] is now one of the elements of the array b
}
但是当" b"有没有办法做到这一点。是在for语句本身中定义的? e.g。
for(a in {'a' : 'alpha', 'b' : 'bravo', 'c' : 'charlie'}){
// can I access the alpha, bravo and charlie values here?
}
...
我刚才写到这个我可以使用:
for(var a in b = {'a' : 'alpha', 'b' : 'bravo', 'c' : 'charlie'}){
// b[a] will now give me the alpha, bravo, charlie values
}
但如果我试图宣布" b"用:
for(var a in var b = {...})
我收到语法错误。
这意味着我可以这样做,但只能通过隐式声明b为全局。有没有办法在不创建全局的情况下访问这些值?
我意识到还有其他可能更好的方法(例如在循环外定义数组)。我好奇地问这是否可行。
答案 0 :(得分:4)
specification for the for-in
statement表明,不,你不能以你想要的方式访问对象而不在其他变量中引用它。
按照这些步骤,您可以看到for
循环的语句部分中唯一知道该对象的是下一个可枚举属性的名称,如步骤6a中所定义:
设P是[[Enumerable]]属性为true的obj的下一个属性的名称。如果没有这样的属性,则返回(正常,V,空)。
要访问有关该对象的任何其他内容,您需要自己引用它。
答案 1 :(得分:-1)
您可以使用IIFE对其进行换行,以防止创建全局变量。
(function () {
var b = {'a' : 'alpha', 'b' : 'bravo', 'c' : 'charlie'};
for(var a in b){
console.log(b[a]);
}
})();