如何引用在javascript for语句中定义的对象

How can I refer to an object that is defined in a javascript for statement?

本文关键字:语句 for 定义 对象 javascript 何引用 引用      更新时间:2023-09-26

在Javascript中,"foreach"循环的等价物是:

for(a in b){
    // b[a] is now one of the elements of the array b
}

但是,当在for语句中定义"b"时,有没有办法做到这一点?例如

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声明为全局。有没有一种方法可以在不创建全局的情况下访问这些价值观?

我意识到还有其他可能更好的方法可以做到这一点(例如,在循环之外定义数组)。出于好奇,我问这是否可行。

for-in语句的规范清楚地表明,不,如果不在其他变量中引用对象,就无法以您希望的方式访问对象。

按照步骤到,您可以看到,关于for循环语句部分中的对象,唯一已知的是下一个可枚举属性的名称,如步骤6a中所定义:

设p为[[Enumerable]]属性为true的obj的下一个属性的名称。如果没有这样的属性,则返回(normal,V,empty)。

要访问关于对象的任何其他内容,您需要自己对它的引用。

您可以用IIFE包装它以防止创建全局变量。

(function () {
    var b = {'a' : 'alpha', 'b' : 'bravo', 'c' : 'charlie'};
    for(var a in b){
        console.log(b[a]);
    }
})();