如何在JavaScript中的变量名中使用变量值?

时间:2013-08-23 02:52:41

标签: javascript

我有一个关联数组,我正在制作一个像这样开始的开关函数:

switch (Years['year'].StartDay) {

它所使用的函数传递一个名为year的值并且其中包含一个值,如下所示:

function CalendarData(year, month) {
    var Years = new Object();
    Years.['2013'].StartDay = 'Sunday';
    switch (Years['year'].StartDay) {
        case 'Sunday':
        this.Day = 1;
        break;
    }
}

我想创建一个新的Object并从对象中获取数据,如下所示:

var CalendarDay = new CalendarData('2013','February');

问题在于它不是在阅读Years['year'].StartDay

3 个答案:

答案 0 :(得分:1)

Years['year'].StartDay

应该是

Years[year].StartDay

你还需要构建数据结构,没有像Perl那样的自动修复:

var Years = new Object();
Years.['2013'].StartDay = 'Sunday';

应该是

var Years = {};
Years[2013] = {};
Years[2013].StartDay = 'Sunday';

或(如果这是灵活的话,如果没有):

var Years = { '2013' : { StartDay : 'Sunday' } };

答案 1 :(得分:1)

删除你不应该把它们放在变量

周围的引号

而不是

Years['year'].StartDay

Years[year].StartDay

答案 2 :(得分:0)

我将不得不假设这里没有显示很多代码。

如果是这种情况,那么第一个时期是:

Years.['2013'].Startday = 'Sunday';

...在最好的情况下,是一个错字。它应该看起来像这样:

Years['2013'].StartDay = 'Sunday';

但是,在您将“年”作为一个裸露的空对象声明之前,您似乎假设在它下面存在整个对象结构,这让我感到有点奇怪。

所写的引用至少假定'Years'实际上是一个数组,并且'Years'数组的索引['2013']包含另一个对象,'StartDay'是该对象的成员它包含。

考虑到你刚刚将'Years'声明为空对象,这一切都不会按你想要的方式工作。

直接回答问题的最简单的解决方案是:

var Years = [];
Years['2013'] = 'Sunday';

switch(Years['2013'])
{
    case 'Sunday':
        // Do whatever here
        break;
    case 'Monday':
        // etc.
        break;
    // etc.
}

但是,如果你真的试图运行你给我们的代码,我可能会建议阅读JavaScript Object Model ...它非常强大和灵活,但也与大多数其他语言不同。

这可能是您问题的原因之一。

我会推荐THIS,或者,如果你喜欢实体书,那么就是优秀的“JavaScript:The Good Parts”,它已经成为程序员从其他语言中获取JavaScript的标准。 / p>