-1

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

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;
    }
}

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

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

问题是它不读书Years['year'].StartDay

4

3 回答 3

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' } };
于 2013-08-23T02:54:38.763 回答
1

删除不应该将它们放在变量周围的引号

代替

Years['year'].StartDay

Years[year].StartDay
于 2013-08-23T02:56:20.493 回答
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 对象模型......它非常强大和灵活,但也与大多数其他语言非常不同。

这可能是您的问题的根源之一。

我会推荐THIS或者,如果你喜欢一本实体书,就像我一样,推荐优秀的“JavaScript: The Good Parts”,它已经成为从其他语言转向 JavaScript 的程序员的标准。

于 2013-08-23T03:54:58.027 回答