我有一个关联数组,我正在制作一个像这样开始的开关函数:
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
答案 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>