3

你可以在这里看到一个工作示例:

http://jsfiddle.net/bwhitney/ZDHp4/1/

我正在尝试在 javascript 中创建一个对象数组。当我尝试访问对象时,我得到“未定义”的输出。这是一些示例代码:

var dates = [];

var beginDate1 = new Date("01 / 01 / 01");
var endDate1 = new Date("02 / 02 / 02");
var beginDate2 = new Date("03 / 03 / 03");
var endDate2 = new Date("04 / 04 / 04");

// this outputs the correct dates
alert("before: " + beginDate1 + "--" + endDate1);
alert("before: " + beginDate2 + "--" + endDate2);

dates.push({
    "beginDate": beginDate1,
    "endDate": endDate1
}, {
    "beginDate": beginDate2,
    "endDate": endDate2
});

var date;
for (date in dates) {
    // this outputs "date: undefined--undefined"
    // why would that be?
    alert("after: " + date.beginDate + "--" + date.endDate);
}
4

4 回答 4

6

JavaScript 中的for ... in循环为您提供对象中的,而不是值。

但是,您确实应该使用数字索引:

for (var date = 0; date < dates.length; ++date) {
  alert("date " + date + " is: " + dates[date]);
}

遍历键for ... in不会只拾取数字索引的数组元素;它对数组进行操作,就好像它们是普通的对象一样。其他属性也会被选中,而且你甚至不能保证它会按数字升序排列!

于 2012-06-07T19:38:58.747 回答
1

每个循环中的常见错误。date是 的索引dates。你应该写:dates[date].beginDate

于 2012-06-07T19:39:06.580 回答
0

当使用 for..in 循环时,变量被分配了键,而不是值!

for (date in dates) {
    alert('after: ' + dates[date].beginDate ...);
}
于 2012-06-07T19:39:01.613 回答
0

for ... in不适用于数组,您可以使用for像这样的常规小提琴:http: //jsfiddle.net/bwhitney/ZDHp4/1/

参考:为什么在数组迭代中使用“for...in”是个坏主意?

于 2012-06-07T19:45:08.803 回答