为什么 javascript 对象在循环遍历数组时输出为“未定义”
Why do javascript objects output as "undefined" when looping through an array?
你可以在这里看到一个工作示例:
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);
}
JavaScript 中的 for ... in
循环为您提供对象中的键,而不是值。
但是,您确实应该使用数字索引:
for (var date = 0; date < dates.length; ++date) {
alert("date " + date + " is: " + dates[date]);
}
使用 for ... in
遍历键不仅会拾取数字索引的数组元素;它会对数组进行操作,就好像它们是普通对象一样。其他属性也会被拾取,而且您甚至不能保证它会按数字升序排列!
每个循环的常见错误。 date
是dates
的索引。你应该写:dates[date].beginDate
.
使用 for.在循环中,变量被分配键,而不是值!
for (date in dates) {
alert('after: ' + dates[date].beginDate ...);
}
for ... in
不能像数组那样工作,你可以使用像下面的常规for
:http://jsfiddle.net/bwhitney/ZDHp4/1/
参考:为什么使用"为...在"数组迭代是一个坏主意?
相关文章:
- Node.js/Express未输出console.log,highcharts.js给出未定义的错误
- JS函数只返回未定义的数据,但alert输出正确的数据
- '未定义'当需要模块时输出
- 具有中文字符但输出的JSON.parse数据变为“;未定义”;
- 为什么我的输出未定义
- IE9中的有效输出,但IE7/IE8中的未定义输出
- 当在 Javascript 中使用许多 for 循环时,输出是未定义的
- 它无法正常工作,它输出未定义
- 使用 PHP 输出的 Javascript 数组时出现未定义错误
- 为什么简码输出中的值“未定义” - tinyMCE
- Vue.js 使用 Vuex 和自定义组件,@click方法输出未定义
- 为什么 javascript 对象在循环遍历数组时输出为“未定义”
- 为什么我得到未定义的输出Javascript
- 对象未定义/HTML使用jQuery输出
- 未定义获取输出而不是对象属性
- 为什么当我将变量记录到控制台时,我得到了输出,但是当我返回它时,我收到“未定义”
- 函数对数组元素进行编号输出“;未定义”;
- 带有Ajax的JavaScript和HTTP请求输出未定义的显示2
- Handlebars追加'未定义'在助手输出上
- 对象实例为其输出“未定义”'s原型'的属性.为什么?