变量"变量"在Javascript中 - 未定义

时间:2015-09-01 14:54:24

标签: javascript json

JSON:

var promiseObj = {
"physical": [],
"virtual": []
}
var config = {
"Environments": [
"LH5",
"LH8",
"AMS"
],
 "Clusters": {
    "LH5": 4,
    "LH8": 4,
    "AMS": 4
}
};

所以我试图根据上面给定JSON对象中的环境和集群设置不同的promise对象。

for (var i = 0; i < config.Environments.length; i++) { 
    promiseObj.physical[config.Environments[i]][config.Clusters[config.Environments[i]]] = $http.get('URL').success(function(data) {
    //Successful stuff here 
});

}

然而,当执行此for循环时,我收到以下错误:

promiseObj.physical[config.Environments[i]] is undefined

当有人在文档的开头明确定义对象时,是否有人可以了解为什么返回undefined?

3 个答案:

答案 0 :(得分:1)

您将physical声明为数组,然后将其作为对象进行访问,因此您尝试访问不存在的属性。 尝试按如下方式声明physical

"physical": {}

答案 1 :(得分:1)

由于physical是一个空数组,因此其中的所有键都是undefined。您需要在第一次使用它们时填充它们:

if (typeof promiseObj.physical[config.Environments[i]] == 'undefined') {
    promiseObj.physical[config.Environments[i]] = {};  // or [], whichever you want
}
promiseObj.physical[config.Environments[i]][config.Clusters[config.Environments[i]]] = ...

答案 2 :(得分:1)

这是因为promiseObj.physical[]是一个空数组,你必须在之前初始化你想要的索引:

for (var i = 0; i < config.Environments.length; i++) { 
    if(!promiseObj.physical[config.Environments[i]]) promiseObj.physical[config.Environments[i]] = {}; // Initialize it
    promiseObj.physical[config.Environments[i]][config.Clusters[config.Environments[i]]] = $http.get('URL').success(function(data) {
    //Successful stuff here 
    });

}